2011-01-21 3 views
3

Возможно ли прослушивание события скольжения по определенному элементу?Можно ли подключить обработчик к событию скольжения?

Я надеялся, что это будет легко, как:

$("#element").slideDown(); 

$('#element').bind('slideDown', function() { 
    alert('Slidedown event fired'); 
}); 

Не удалось найти "slideDown" как event.

Возможно ли прослушивание такого мероприятия?

ответ

0

С некоторой помощью Ben on method overriding я был в состоянии добавить триггер на вызов функции, которые можно связать с:

$(function(){ 
    ;(function($){ 
     var orig_slideDown = $.fn.slideDown; 

     $.fn.slideDown = function(){ 
      $(this).trigger('slideDown'); 
      orig_slideDown.apply(this, arguments); 
     }; 
    })(jQuery); 

    $('.up').click(function(){ 
     $('div').slideUp(); 
    }); 
    $('.down').click(function(){ 
     $('div').slideDown(); 
    }); 
    $('div').bind('slideDown',function(){ 
     $('div').append($('<p>').text('Down Triggered')); 
    }); 
}); 

<a href="#" class="up">Up</a> <a href="#" class="down">Down</a> 
<div style="width:300px;height:200px;background-color:red;color:white;"> 
    <p>Hello, world!</p> 
</div> 
3

Чтобы сделать такого рода вещи, я просто добавить еще семантических методов. Так что если у вас есть меню, и вы хотите, чтобы вызвать событие, когда вы переместите его вниз, вместо того, чтобы сделать что-то подобное,

var menu = $('#menu'); 
menu.open = function() { 
    menu.slideDown(); 
    menu.trigger('menuOpened'); 
}; 

Тогда просто позвоните menu.open() вместо menu.slideDown(). Этот подход более читабельен и поддерживается, поскольку вы создаете другие объекты, которые взаимодействуют друг с другом. Затем, если вы решите изменить свою открывающую анимацию позже (скажем, на fadeIn или что-то еще), вам не нужно обновлять все, которое взаимодействует с ним.

Смежные вопросы