特定の要素でスライドダウン イベントをリッスンすることはできますか?
私はそれが次のように簡単になることを望んでいました:
$("#element").slideDown();
$('#element').bind('slideDown', function() {
alert('Slidedown event fired');
});
イベントとして「slideDown」が見つかりませんでした。
そのようなイベントをリッスンすることは可能ですか?
この種のことを行うために、私はさらにセマンティックメソッドを追加します。したがって、メニューがあり、それを下にスライドしたときにイベントをトリガーしたい場合は、代わりに次のようにします。
var menu = $('#menu');
menu.open = function() {
menu.slideDown();
menu.trigger('menuOpened');
};
次に、menu.open()
の代わりに呼び出しますmenu.slideDown()
。このアプローチは、相互作用する他のオブジェクトを作成するときに、より読みやすく、保守しやすくなります。その後、オープニングアニメーションを後で変更することを選択した場合(たとえば、fadeInなど)、それと相互作用するすべてを更新する必要はありません。
メソッドのオーバーライドに関する Benの助けを借りて、バインドできる関数呼び出しにトリガーを追加することができました。
$(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>