Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Параллакс для разных элементов (https://javascript.ru/forum/dom-window/65079-parallaks-dlya-raznykh-ehlementov.html)

LADYX 26.09.2016 09:26

warren buffet,
Все блоки, у которых атрибут data, при прокрутке страницы, имеют начальное значение, указанное в атрибуте data-val, и при достижении центра экрана (по вертикали) отступ меняют до нуля. Ну а там где в атрибуте data-val указано отрицательное значение, при прокрутке оно не меняется, не уменьшается до нуля.
С margin пытался, не получается, мне ведь нужен отступ для каждого блока только с какой-то одной стороны.

рони 26.09.2016 09:57

Цитата:

Сообщение от рони
я без понятия что делает ваш код.

LADYX,
где вы взяли формулу для расчёта, и что она считает?
формула классическая =
Цитата:

Сообщение от warren buffet
значит должен быть старт и стоп,

Цитата:

result = (to - from) * delta(progress) + from
описание тут
osnovnaya-formula
и тут
https://learn.javascript.ru/js-animation
пример реализации
http://javascript.ru/forum/dom-windo...tml#post401266

warren buffet 26.09.2016 11:49

Короче, народ, обычно делается наоборот. Сначала в инспекторе браузера выясняешь какой метод применим и какой применим лучше, потом применяешь. Не двигается? Выводишь в консоль циферки, там двигается? Значит метод применения стилей неправильный. Открываешь инспектор, вписываешь вручную, смотришь.

Вам на кой такого могучего инспектора написали? Щас даже ховеры там есть. Из испектора стили копируются как правила, причем отключенные правила копируются закомментированными.

LADYX 26.09.2016 17:21

Вопрос решается заменой строки:
$(this).css({transform: el.dataset.tr+"("+ margMin +"px)"});

на:
$(this).css({[el.dataset.tr]: margMin +"px"});

в целом скрипт:
$(function() {

var $win = $(window),
    $rev = $('[data-tr]'),
    winH2 = 0,
    winSt = 0;

function reveal() {

  winSt = $win.scrollTop();
  winH2 = $win.height()/2;

  $rev.each(function(i, el){
    var y = el.getBoundingClientRect().top,
        toMiddleMax = Math.max(0, y-winH2),
        idealMarg   = Math.min(+el.dataset.val, toMiddleMax),
        margMin     = Math.min(idealMarg, idealMarg * (toMiddleMax/winH2));
    $(this).css({[el.dataset.tr]: margMin +"px"});
  });

}
$win.on({
  "load resize scroll" : reveal
});

});

<div class="block" data-tr="margin-left (или любое другое свойство)" data-val="300"></div>


Но теперь возникает другой вопрос: Только один браузер - Internet Explorer не понимает:
[el.dataset.tr]

рони 26.09.2016 17:31

Цитата:

Сообщение от LADYX
Вопрос решается заменой строки:

по моему бред, но раз у вас работает ... квадратные скобки зачем?

LADYX 26.09.2016 18:27

рони,
без квадратных скобок не работает. Вот смотрите https://jsfiddle.net/LADYX/01904e4b/1/ , что мне нужно, там наглядный пример. Так вот этот скрипт работает везде, кроме IE. IE не понимает именно вот это:
[el.dataset.tr]

warren buffet 26.09.2016 18:31

Смотря какая версия. Просто бери атрибут методом - .getAttribute('data-tr') - верняк.

рони 26.09.2016 18:34

LADYX,
.... и будет вам счатье в ie
$rev.each(function(i, el){
    var y = el.getBoundingClientRect().top,
        toMiddleMax = Math.max(0, y-winH2),
        idealMarg   = Math.min(+el.dataset.val, toMiddleMax),
        margMin     = Math.min(idealMarg, idealMarg * (toMiddleMax/winH2));
        var opt = {};
        opt[el.dataset.tr] = margMin +"px";
    $(this).css(opt);
  });

warren buffet 26.09.2016 18:36

Я тоже не понял, что это за язык, на обычном жс строка

$(this).css({[el.dataset.tr]: margMin +"px"});

выглядела бы так

this.style[el.getAttribute('data-tr')]=margMin+'px';

рони 26.09.2016 18:39

Цитата:

Сообщение от warren buffet
Я тоже не понял, что это за язык

es6


Часовой пояс GMT +3, время: 19:11.