2013-03-26 1 views
0

Я получил (динамически добавленный) элемент, который переупорядочивает на основе горизонтальной прокрутки, что означает, что он может перейти на экран. Прикрепленный к этому элементу, есть еще один, который не может зайти на экран, он должен оставаться на экране. Поэтому моя идея состояла в том, чтобы использовать обработчик событий, который запрашивает позицию элементов при каждом прокрутке. Если атрибут position-left становится ниже определенного числа, прикрепленный элемент будет затем перемещаться.jQuery: (live) scroll Обработчик событий на динамически добавленном элементе? Как еще я должен это решить?

Вы знаете эти элементы, это как меню/навигация, которые прокручиваются с вами до определенной точки, а затем, по-видимому, фиксируются положением.

Я пробовал это, но он не работает, возможно, потому что элементы добавлены с помощью javascript. Я тоже попробовал live("scroll".., но это тоже не сработало.

$(window).scroll(function(ev) { 
alert($("#scrElem").position().left); 
    alert("work");  
    if ($("#scrElem").position().left >= 203) { 
     $("#scrElem .attElem").css("left", ($("#scrElem").position().left - 203) + "px"); 
    }; 
}); 

EDIT:

Может быть, это помогает: Я использую tinyscrollbar плагин, здесь читаемая версия этого (http://baijs.nl/tinyscrollbar/js/jquery.tinyscrollbar.js). В основном этот плагин запускает события при прокрутке. Вот что я хочу, я даже видел, где он это сделал:

oWrapper[0].addEventListener('DOMMouseScroll', wheel, false); 
oWrapper[0].addEventListener('mousewheel', wheel, false); 
oWrapper[0].addEventListener('MozMousePixelScroll', function(event){ 
    event.preventDefault(); 
}, false); 
+0

Не можете ли вы установить 'position: fixed' после прокрутки до определенной точки? – Horen

+0

Да, я мог бы, но событие не находит мой элемент, потому что он был создан с помощью javascript после завершения события DOM. – user828591

ответ

-1

В этом независимо от объектов, которые вы будете дописывать в контейнер будет работать, но не разрушают .main_container

$(document).on('scroll', '.main_container', function() { 



}); 
+3

Ваш пример не работает для меня, он не дает мне никакой обратной связи (предупреждение и т. Д.). – user828591

+0

Его не должно ... Это просто, чтобы проверить, как привязать событие к элементу DOM и сохранить его всегда живым, вы можете делать все, что захотите внутри функции. – tbem

+1

Я, конечно, изменил ваш пример в соответствии с моей ситуацией. Это все еще не сработало, но я нашел другое, адекватное решение. – user828591

-1

Ища другой вопрос, я, к счастью, нашел способ заставить его работать в моем случае:

var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel" 
$("#scrElem").live(mousewheelevt, function(e){ 
// do my position stuff 
}); 

Простой, как это работает!

-1

Проблема с этим солитона:

var mousewheelevt = (/Firefox/i.test(navigator.userAgent)) ? "DOMMouseScroll" : "mousewheel"; 

является то, что она не работает, когда я прокручиваю, нажав на полосу прокрутки и перетащив его.

Я понял, что вам не нужно прикреплять событие прокрутки, как если бы это динамический элемент. Просто обработайте его, как если бы он был статичным:

$("#scrElem").on('scroll', function(e){ 
// do my position stuff 
}); 

и что работает отлично!