我正在编写一个小的jQuery函数,我似乎遇到了麻烦。
我在这里尝试做的是当用户向下滚动页面90px时,div标签应该向下移动(从顶部:-50px到顶部:0),反之亦然当它们滚动回顶部页面。
我遇到的问题是动画似乎很慢而且反应迟钝。我在3种不同的浏览器和不同的计算机上测试,但我没有快乐。
这是我的代码:
// Show div
var scrollValue = "90";
// Animate functions
var showHead = function (){
$(".element").animate({top: "0"}, 250);
}
var hideHead = function (){
$(".element").animate({top: "-50px"}, 250);
}
$(window).scroll(function() {
if ($(this).scrollTop() > scrollValue) {
showHead();
} else {
hideHead();
}
});
.element属性:
.element { positoin:fixed; top:-50px; }
有人能弄清楚为什么我的代码hide / showHead函数如此草率?
谢谢,
彼得
答案 0 :(得分:1)
试试这个:
$(window).scroll(function() {
if (window.scrollY > scrollValue) {
showHead();
} else {
hideHead();
}
});
答案 1 :(得分:1)
scroll
个事件。
在重新开始动画之前,您需要检查动画是否正在进行中。
试试这个:
// Show div
var scrollValue = "90";
var inProgress = false;
// Animate functions
var showHead = function () {
if(inProgress)
return false;
//Animate only if the animation is not in progress
inProgress = true;
$(".element").animate({
top: "0"
},250,function(){
inProgress = false; //Reset when animation is done
});
}
var hideHead = function () {
if(inProgress)
return false;
//Animate only if the animation is not in progress
inProgress = true;
$(".element").animate({
top: "-50px"
}, 250,function(){
inProgress = false; //Reset when animation is done
});
}
$(window).scroll(function () {
if ($(this).scrollTop() > scrollValue) {
showHead();
} else {
hideHead();
}
});
答案 2 :(得分:1)
答案 3 :(得分:1)
假设你有position:fixed
(或其他一些样式,在必要时可以看到栏):
var scrollheight = 90;
var $el = $('.element');
function showHead(){
$el.stop().animate({
top: '0px'
}, 250);
}
function hideHead(){
$el.stop().animate({
top: '-50px'
}, 250);
}
$(window).scroll(function(){
if ($(window).scrollTop() > scrollheight){
showHead();
}else{
hideHead();
}
});
答案 4 :(得分:1)
scroll
事件被触发多次,即使它是速率限制的,它仍然是一个相当密集的操作。实际上,您可能正在排队几个动画,fx
堆栈可能会很快增长。
您可以尝试的一种可能性是在触发新动画之前停止所有先前的动画。您可以使用.stop()
。
$(".element").stop().animate({top: "0"}, 250);
.stop()
功能还提供了一些其他选项,您可以使用它们进一步调整它。