javascript-jQuery:“ body”元素两次激活了滚动事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-jQuery:“ body”元素两次激活了滚动事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2260字,纯文字阅读大概需要4分钟。
内容图文
我已经为我的照片博客实现了动画.我仍然有一个大问题,因为“ body”元素两次激活了动画.
我认为问题出在$(‘body’).animate.因为我认为在给主体设置动画时,滚动事件将再次被激活,从而触发该事件两次.
我的代码的问题是向上滚动页面.当我向上滚动页面时. scrollAnimatePrev将触发,然后$(‘body’)元素将对其自身进行动画处理.动画之后,动画变量将设置为false.但是$(‘body’)元素会触发滚动事件,因为我猜想当我设置scrollTop时会触发滚动事件.因此再次将currentPos设置为$(window).scrollTop(),然后currentPos> previousPos返回true,!animating返回true,因此将触发scrollAnimate.
现在,我要修复此问题.怎么样?
$(function() {
var record = 0;
var imgHeight = $(".images").height();
var offset = $(".images").eq(0).offset();
var offsetHeight = offset.top;
var previousPos = $(window).scrollTop();
var animating = false;
var state = 0;
$(window).scroll(function() {
var currentPos = $(window).scrollTop();
console.log(currentPos);
if(currentPos > previousPos && !animating) {
record++;
scrollAnimate(record, imgHeight, offsetHeight);
animating = true;
} else if (currentPos < previousPos && !animating) {
record--
scrollAnimatePrev(record, imgHeight, offsetHeight);
animating = true;
}
previousPos = currentPos;
console.log(previousPos)
})
function scrollAnimate(record, imgHeight, offsetHeight) {
$('body').animate(
{scrollTop: (parseInt(offsetHeight) * (record+1)) + (parseInt(imgHeight) * record)},
1000,
"easeInOutQuart"
)
.animate(
{scrollTop: (parseInt(offsetHeight) * (record)) + (parseInt(imgHeight) * (record))},
1000,
"easeOutBounce",
function() {
animating = false;
}
)
}
function scrollAnimatePrev(record, imgHeight, offsetHeight) {
$('body').animate(
{scrollTop: ((parseInt(imgHeight) * record) + (parseInt(offsetHeight) * record)) - offsetHeight},
1000,
"easeInOutQuart"
)
.animate(
{scrollTop: ((parseInt(imgHeight) * record) + (parseInt(offsetHeight) * record))},
1000,
"easeOutBounce",
function() {
animating = false;
}
)
}
})
解决方法:
我认为这可能会触发两次回调.我最近有一个类似的问题.
我有类似的东西
$('#id, #id2').animate({width: '200px'}, 100, function() { doSomethingOnceOnly(); })
它两次调用了doSomethingOnceOnly(),我认为它一定是$参数中的双重选择器.我只是使它成为2个不同的选择器,并且效果很好.像这样
$('#id').animate({width: '200px'}, 100);
$('#id2').animate({width: '200px'}, 100, function() { doSomethingOnceOnly(); );
内容总结
以上是互联网集市为您收集整理的javascript-jQuery:“ body”元素两次激活了滚动事件全部内容,希望文章能够帮你解决javascript-jQuery:“ body”元素两次激活了滚动事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。