Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Отслеживание CSS свойства translate у элемента и подстановка в другой элемент (https://javascript.ru/forum/jquery/73363-otslezhivanie-css-svojjstva-translate-u-ehlementa-i-podstanovka-v-drugojj-ehlement.html)

EuRo1985 09.04.2018 18:35

Отслеживание CSS свойства translate у элемента и подстановка в другой элемент
 
Приветствую, знатоки JS и JQuery!

Прошу помощи с решении задачи, сам с JS слаб, а в интернете уже все перерыл - ответа не нашел...

Есть один сайт, на котором использую скрипт fullPage - постраничная прокрутка. По-сути скрипт заворачивает все секции в "слайды" со свойством position: fixed. Т.е. он полностью убирает скролл.

Однако есть слайды в которых необходима прокрутка и тут самое интересное - "прокрутка" происходит средствами изменения transform: translate и свойства overflow: hidden. Следовательно событие scroll не срабатывает.

Внутри этого блока с прокруткой есть элемент, который должен быть зафиксировать, position: fixed в данном случае не работает.

Задача - динамически определять у одного элемента (fp-scroller) свойства transform: translate (вероятно при изменении) и подставлять в другой обратные значения (map-block). Т.е. в данном примере нужно подставить на текущий момент transform: translate(0px, 57px) элементу map-block.

Кто-нибудь сталкивался с подобной задачей?

Буду сильно благодарен за помощь.

<div class="fp-scroller" style="transition-timing-function: cubic-bezier(0.1, 0.57, 0.1, 1); transition-duration: 0ms; transform: translate(0px, -57px) translateZ(0px);">
  <div class="fl-grid two-cols">
    <div class="column text-block">
    </div>
    <div class="column map-block">
  </div>
</div>

ruslan_mart 10.04.2018 11:56

EuRo1985, отслеживайте событие while/mousewheel над элементом.

EuRo1985 10.04.2018 16:12

Цитата:

Сообщение от ruslan_mart (Сообщение 482884)
EuRo1985, отслеживайте событие while/mousewheel над элементом.

Огромное спасибо за наводку. Реализовал скрипт след. образом, все работает. За грамотность не ручаюсь, если кто-то подправить - респект :)

$(function(){
    $('body').on('mousewheel DOMMouseScroll', function(event) {
      if ($('.contacts-section').is('.active')) { // ограничиваем выполнение нужным слайдом
        var obj = $('.contacts-section .fp-scroller');
        var transformMatrix = obj.css("-webkit-transform") ||
                              obj.css("-moz-transform")    ||
                              obj.css("-ms-transform")     ||
                              obj.css("-o-transform")      ||
                              obj.css("transform");
        var matrix = transformMatrix.replace(/[^0-9\-.,]/g, '').split(',');
        var x = matrix[12] || matrix[4]; // translate x
        var y = matrix[13] || matrix[5]; // translate y
        $('.contacts-section .map-block').css({
          transform: 'translate(0, ' + Math.abs(y) + 'px)'
        });
      }
    });
});


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