JQuery取消绑定(滚动)功能不起作用
根据JQuery文档,这必须起作用,但事实并非如此 当弹出窗口显示时调用scrollHandler()函数,如果关闭则必须销毁,但是解除绑定似乎不起作用。如果我执行一个完整的$(window.unbind('scroll'),它确实可以工作,但它也会解除绑定附加到scroll事件的其他元素 代码是:整个滚动事件的惨败发生在第23行和第44行之间,只是为了节省几秒钟 演示(cookies实际工作的地方)位于:JQuery取消绑定(滚动)功能不起作用,jquery,Jquery,根据JQuery文档,这必须起作用,但事实并非如此 当弹出窗口显示时调用scrollHandler()函数,如果关闭则必须销毁,但是解除绑定似乎不起作用。如果我执行一个完整的$(window.unbind('scroll'),它确实可以工作,但它也会解除绑定附加到scroll事件的其他元素 代码是:整个滚动事件的惨败发生在第23行和第44行之间,只是为了节省几秒钟 演示(cookies实际工作的地方)位于: 如前所述,函数scrollHandler(){…}每次调用handleEyeCatche
如前所述,
函数scrollHandler(){…}
每次调用handleEyeCatcher()
时都会重新定义
因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例
尝试将
scrollHandler()
移动到handleEyeCatcher()
外部,然后unbind('scroll',scrollHandler)
将保证看到一个且唯一的scrollHandler,每次调用handleEyeCatcher()
时都会重新定义函数scrollHandler(){…}
因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例
尝试将scrollHandler()
移动到handleEyeCatcher()
外部,然后unbind('scroll',scrollHandler)
将保证看到一个且唯一的scrollHandler,每次调用handleEyeCatcher()
时都会重新定义函数scrollHandler(){…}
因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例
尝试将scrollHandler()
移动到handleEyeCatcher()
外部,然后unbind('scroll',scrollHandler)
将保证看到一个且唯一的scrollHandler,每次调用handleEyeCatcher()
时都会重新定义函数scrollHandler(){…}
因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例
尝试将scrollHandler()
移动到handleEyeCatcher()
外部,然后unbind('scroll',scrollHandler)
将保证看到一个并且只有scrollHandler
应该使用.on()
和.off()
,而不是.bind()
和.unbind()
.think:函数scrollHandler(){…}
每次调用handleEyeCatcher()
时都会重新定义。因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将scrollHandler()
移动到handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用.on()
和.off()
,而不是.bind()
和.unbind()
。我想:函数scrollHandler(){…}
每次调用handleEyeCatcher()
时都会重新定义。因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将scrollHandler()
移动到handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用.on()
和.off()
,而不是.bind()
和.unbind()
。我想:函数scrollHandler(){…}
每次调用handleEyeCatcher()
时都会重新定义。因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将scrollHandler()
移动到handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你添加你的评论作为答案,我会接受。现在应该使用.on()
和.off()
,而不是.bind()
和.unbind()
。我想:函数scrollHandler(){…}
每次调用handleEyeCatcher()
时都会重新定义。因此,.unbind('scroll',scrollHandler)
保证只查看由闭包规则确定的该函数的实例。尝试将scrollHandler()
移动到handleEyeCatcher()
外部。非常感谢您的建议!我读过关于绑定/取消绑定和打开/关闭的文章,结果发现它们几乎是一样的,而且都是双向的。真正的技巧实际上是将scrollHandler()函数移到handleEyeCatcher()之外。如果你加上你的评论作为回答,我会接受的。
/* Crate Slug */
function convertToSlug(text) {
return text
.toLowerCase()
.replace(/[^\w ]+/g,'')
.replace(/ +/g,'-');
}
/**/
function handleEyeCatcher(slug){
console.log($.cookie());
console.log(slug);
/* If not set, create default cookie */
if(!$.cookie(slug)) {
$.cookie(slug, 'true', { expires: 7 });
$('#eye-catch').addClass('visible');
}
/* Status */
var status = $.cookie(slug);
console.log(status);
/* Scroll Function */
function scrollHandler () {
var height = $(window).height();
if ($(this).scrollTop() > height) {
$('#eye-catch').removeClass('invisible');
$('#eye-catch').addClass('visible');
} else {
$('#eye-catch').removeClass('visible');
$('#eye-catch').addClass('invisible');
}
}
/* Hide/show element depending on cookie */
if(status == 'true'){
console.log('it is opened');
$(window).bind('scroll', scrollHandler);
} else {
$(window).unbind('scroll', scrollHandler);
console.log('it is closed');
$('#eye-catch').removeClass('visible');
$('#eye-catch').addClass('invisible');
}
}
$(document).ready(function(){
/* Get raw slug */
var rawSlug= $('#eye-catch .title').text();
/* Convert to cookie name friendly slug */
var slug = convertToSlug(rawSlug);
handleEyeCatcher(slug);
/* Hide and update cookie on click */
$('#eye-catch .close').on('click', function(){
$.cookie(slug, 'false', { expires: 7 });
handleEyeCatcher(slug);
});
/* Revert action */
$('#revert').on('click', function(){
$.cookie(slug, 'true', { expires: 7 });
handleEyeCatcher(slug);
});
});