我有以下函数:
$('.link1').click(function(){
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
});
这段代码可以切换指定的元素并滚动页面到该元素位置。问题是,每次用户切换时页面都会再次滚动...如何使该动画函数仅在第一次点击时运行?
我有以下函数:
$('.link1').click(function(){
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
});
这段代码可以切换指定的元素并滚动页面到该元素位置。问题是,每次用户切换时页面都会再次滚动...如何使该动画函数仅在第一次点击时运行?
使用标记或设置数据属性,以确保滚动动画仅在第一次点击时发生。
var flag=true;
$('.link1').click(function(){
$("#div2").slideUp(function(){$("#div1").slideToggle();});
if (flag) {
$('html, body').animate({scrollTop: '600px'}, 800);
flag = false;
}
});
我猜测#div2
应该仍然可以切换,但每次点击时不应滚动?
jQuery .one() http://api.jquery.com/one/
$('.link1').one( 'click', function(){
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
});
.one
函数绑定一个只触发一次的事件。$('.link1').one('click', function(){
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
});
unbind('click')
将是最佳选择。 - jbabey以下内容适用于JQuery。
所使用的CSS:
.cpos {
position: relative;
top: -1.65em;
left: 1.8em;
}
var p=null; /* Initialize variable p. */
p=$("b").detach(); /* Detach every possible <b>b</b>-tags. */
var p=$("<b>Console loaded!</b>").addClass("cpos"); /* Do anything, like adding class. */
p.appendTo("#container"); /* Append new data to the anchor container. */
var noRun = 0
$('.link1').click(function(){
if(noRun==1) {
return
}
noRun = 1
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
});
您可以保存一个简单的“令牌”来检查是否是第一次以这种方式触发点击:
$('.link1').click(function(){
if(!$(this).data('isFirstTime')) {
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
$(this).data('isFirstTime', true);
}
});
这应该可以防止进一步的点击
应该可以了
(function(){
var first=true;
$('.link1').click(function(){
if (first){
first=false;
$("#div2").slideUp(function(){$("#div1").slideToggle();});
$('html, body').animate({scrollTop: '600px'}, 800);
}
});
})();
$('.link1').off('click');
off
仅适用于由 on
绑定的处理程序,而这在 OP 的代码片段中并不是这种情况。 - jbabey
.one()
不起作用!如果点击函数只执行一次,那么就不会有切换效果,所以无论是否复制/粘贴,都是错误的答案和错误的方法,至少在阅读问题时是这样,问题中指出OP不希望每次元素切换时都有动画滚动效果,并且大多数答案都没有切换?此外,点击处理程序附加到一个类上,而one
再次只会执行一次,所以如果有几个具有相同类的元素,就会出现相同的问题? - adeneo