jQuery:如果其他滚动函数,则进行动画处理
jQuery: animate if else scroll function
我设置了一个滚动函数,因此当窗口滚动超过 50px 时,
.header-wrap
div 会从 140px
的高度动画化到 70px
,理想情况下应该发生的事情是当您从顶部向下滚动不到 50px 时,.header-wrap
div 应该从 70px
向后动画化140px
但这个函数似乎没有正常工作:
js小提琴:http://jsfiddle.net/ub8Rb/
.HTML:
<div class="header-wrap">hello</div>
<div class="scroll"></div>
.CSS:
.header-wrap {
position: fixed;
width: 100%;
height: 140px;
top: 0;
left: 0;
text-align: center;
background-color: #999;
z-index: 9999;
}
.scroll {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 4000px;
}
j查询:
$(document).scroll(function () {
if (window.scrollY > 50) {
$(".header-wrap").animate({
height: "70px"
}, 500);
} else {
$(".header-wrap").animate({
height: "140px"
}, 500);
}
});
这个函数似乎没有像我上面描述的那样工作,并且没有根据窗口滚动的距离来对div 的高度进行动画处理。任何建议将不胜感激!
这个很流畅...
var go = true;
$(window).scroll(function() {
if ($(this).scrollTop() > 50 && go) {
$(".header-wrap").stop().animate({height:'70px'}, 500);
go = false;
} else if ($(this).scrollTop() < 50 && !go) {
$(".header-wrap").stop().animate({height:'140px'}, 200);
go = true;
}
});
做了一个小提琴:http://jsfiddle.net/filever10/z5D4E/
这可能是动画冲突的问题,因为如果您缓慢滚动,您的示例就可以工作。设置触发器以确定何时/是否播放高度动画应纠正冲突。下面是此工作的示例:
http://jsfiddle.net/ub8Rb/18/
var sizeTrigger = 'tall';
$(document).scroll(function () {
console.log(window.scrollY);
if (window.scrollY > 50 && sizeTrigger == 'tall') {
$(".header-wrap").animate({
height: "70px"
}, 500, function() {
sizeTrigger = 'small';
console.log(sizeTrigger);
});
} else if (window.scrollY < 50 && sizeTrigger == 'small') {
$(".header-wrap").animate({
height: "140px"
}, 500, function() {
sizeTrigger = 'tall';
console.log(sizeTrigger);
});
}
});
向代码中添加一个stop()
,$(".header-wrap").stop().animate
,这将停止任何当前正在执行的动画。 下面是一个包含修改代码的 JSFiddle:>>>单击此处
发生的情况是您的滚动函数将快速触发,尝试执行animate()
函数,这会将它们添加到浏览器的内存中。如果等待的时间足够长,队列将到达末尾,并且动画将按预期工作。
简单的解决方案,在animate()
前面添加stop(true, false)
原料药:http://api.jquery.com/stop/
如果要控制延迟,可以使用包装器函数来捕获重复的事件。
var headerwrap = $(".header-wrap"),
delayedEvent = (function () {
var timers = {};
return function (callback, delay, id) {
delay = delay || 500;
id = id || "duplicated event";
if (timers[id]) {
clearTimeout(timers[id]);
}
timers[id] = setTimeout(callback, delay);
};
})();
$(document).scroll(function (ev) {
delayedEvent(function () {
var h = (window.scrollY > 50) ? 70 : 140;
headerwrap.stop(true, false).animate({ height: h }, 500);
}, 500, "scroll event");
});
小提琴:http://jsfiddle.net/tive/QskJm/
相关文章:
- 使用不同的超时对数组中的每个项目进行角度动画处理
- 图表.js 2,从右到左(不是自上而下)进行动画处理
- 使用 JavaScript 对 HTML5 进度条进行动画处理
- 使用 JQuery 对 Spin SVG 元素进行动画处理
- 使用 GSAP 对模糊滤镜进行动画处理
- 使用 jQuery 对窗口进行动画处理
- 如何使用jQuery对固定元素的位置进行动画处理
- jQuery 动画处理最大宽度溢出问题
- 悬停不起作用时对不透明度更改进行动画处理
- 在两个值之间插值或“补间”(但不进行动画处理)
- 尝试在画布中对形状进行动画处理时,它会显示,但不移动
- 如何在不分隔跨度字母的情况下对文本进行动画处理
- 对链接的 svg 进行动画处理不起作用;内联时工作正常
- 防止对某些事件进行进一步的动画处理
- Snap.svg:在动画中使用相同的种类对多个零件进行动画处理
- 如何使用if语句jquery对数字进行动画处理
- 按随机顺序对元素进行动画处理
- 元素在使用 jQuery 对相对包装宽度进行动画处理时消失
- brush.event 在对画笔事件进行动画处理时会做什么
- 使用ScrollMagic按顺序对多个场景进行动画处理