这个 (jQuery) 函数在jQuery(document).ready
和上调用jQuery(document).resize
。它在条件下运行良好,ready
但在resize
事件上有点麻烦。它们要么继承功能,要么在每次调整大小时似乎都会触发 slideToggle 的情况。
(function(jQuery){
jQuery.fn.responsive = function() {
// Vars
var menuButton = jQuery('nav #menu-button');
var menuItems = jQuery('nav ul');
var menuLinks = jQuery('nav ul li a.scroll');
var viewportW = jQuery(window).width();
var viewportH = jQuery(window).height();
// Menu links
menuLinks.click(function(e){
if (viewportW > 800) {
e.preventDefault();
e.stopPropagation();
var pos = jQuery(this.hash).offset().top;
jQuery('html,body').animate({scrollTop: pos}, 1000);
} else if (viewportW < 799) {
e.stopPropagation();
menuItems.slideUp('fast'); // Hide menu on click
}
});
// Menu button
menuButton.click(function(e){
menuItems.slideToggle('fast');
//e.stopPropagation();
//e.preventDefault();
});
}
})(jQuery);
我究竟做错了什么?我试图终止事件传播,但无济于事。
编辑:
这在以下运行:
// Doc ready
jQuery(document).ready(function() {
// Run functions
jQuery().responsive();
});
// On resize
jQuery(window).resize(function(){
jQuery().responsive();
});