jquery scrollTop 动画功能不工作
jquery scrollTop animation function not working
我已经编写了我的 jQuery 代码,该代码应该为我的元素创建滚动动画的淡入效果。但该元素不会显示在卷轴上。请问有人知道我的代码可能有什么问题吗?下面是我的代码:
$(document).ready(function() {
var windowHeight = jQuery(window).height();
var windowScrollPosTop = jQuery(window).scrollTop();
var windowScrollPosBottom = windowHeight + windowScrollPosTop;
jQuery.fn.revealOnScroll = function() {
return this.each(function() {
var objectOffset = jQuery(this).offset();
var objectOffsetTop = objectOffset.top;
if (!jQuery(this).hasClass("hidden")){
jQuery(this).css("opacity", 0).addClass("hidden");
}
if (!jQuery(this).hasClass("animation-complete")) {
if (windowScrollPosBottom > objectOffsetTop) {
jQuery(this).animate({"opacity": 1},
3000).addClass("animation-complete");
}
}
});
} // end function here
jQuery(window).scroll(function(){
windowHeight = jQuery(window).height();
windowScrollPosTop = jQuery(window).scrollTop();
windowScrollPosBottom = windowHeight + windowScrollPosTop;
jQuery(".tg-whychooseus").revealOnScroll();
});
如果您删除对 "hidden" class 的引用并以类似这样的方式开始(我已经给出了内联样式但是 css 可能更好):
<div class="tg-whychooseus" style="opacity:0">WHY CHOOSE US ?</div>
如果添加具有 "display:none;"
属性的 ".hidden"
class,动画会运行,但元素仍然是 "display:none;"
,因此 class,这可能是该元素未显示的原因(我猜是因为您没有给出 html 或 css)。
祝插件好运(考虑 "throttling" 至少避免连续触发 onScroll,如果所有元素都有 class "animation-complete") 我希望这个帮助ps.
(ps 这里 "throttling" 上有一篇文章 How to Throttle Scroll Events)
(pps 我重新整理了你的代码,以提供一种不同的方法来使其工作(但我确信它可以变得更有效率,而且我还没有测试显示的逻辑多个 div - 你也许可以看看那个)。我建议你仔细阅读它,并参考你可以找到的一些其他代码来尝试做同样的事情,而且,没有真正的捷径,你可能需要花一些时间了解插件的有时微妙的概念。它并不总是直截了当的,而且一如既往,通常最好从非常简单的地方开始构建。网络上有资源,但它们非常零散)。
Html:
<div class="tg-whychooseus" style="opacity:0;">WHY CHOOSE US ?</div>
脚本(带注释):
// Function invoked immediately
!function () {
// Put any code here for before document.ready
// When document ready
$(function () {
// Get collection of revealItems
var revealItems = $(".tg-whychooseus");
// Adjust revealItems when document.ready, before scrolling
// (Not sure why you need this - why not hard code this in to html?)
$.each(revealItems, function () {
if (!jQuery(this).hasClass("hidden")) {
jQuery(this).css("opacity", 0).addClass("hidden");
}
});
// Whenever there is a scroll event
jQuery(window).scroll(function () {
// You should consider "throttling" these events
// to kick in shortly after a scroll event has completed
// rather than continuously => logic here not checked
var windowHeight = jQuery(window).height();
var windowScrollPosTop = jQuery(window).scrollTop();
var windowScrollPosBottom = windowHeight + windowScrollPosTop;
// Iterate through the collection of revealItems
revealItems.each(function () {
if (!jQuery(this).hasClass("animation-complete")) {
// When to animate logic (not tested), and note you've incurred overhead just to get to this point for each scroll event
var objectOffset = jQuery(this).offset();
var objectOffsetTop = objectOffset.top;
if (windowScrollPosBottom > objectOffsetTop) {
if (!jQuery(this).hasClass("animation-complete")) {
// Animate
$(this).animate({
opacity: 1
}, 3000, function () {
// When animation is complete
$(this).addClass("animation-complete");
});
}
}
}
});
});
});
}();
我希望这个帮助ps。
我已经编写了我的 jQuery 代码,该代码应该为我的元素创建滚动动画的淡入效果。但该元素不会显示在卷轴上。请问有人知道我的代码可能有什么问题吗?下面是我的代码:
$(document).ready(function() {
var windowHeight = jQuery(window).height();
var windowScrollPosTop = jQuery(window).scrollTop();
var windowScrollPosBottom = windowHeight + windowScrollPosTop;
jQuery.fn.revealOnScroll = function() {
return this.each(function() {
var objectOffset = jQuery(this).offset();
var objectOffsetTop = objectOffset.top;
if (!jQuery(this).hasClass("hidden")){
jQuery(this).css("opacity", 0).addClass("hidden");
}
if (!jQuery(this).hasClass("animation-complete")) {
if (windowScrollPosBottom > objectOffsetTop) {
jQuery(this).animate({"opacity": 1},
3000).addClass("animation-complete");
}
}
});
} // end function here
jQuery(window).scroll(function(){
windowHeight = jQuery(window).height();
windowScrollPosTop = jQuery(window).scrollTop();
windowScrollPosBottom = windowHeight + windowScrollPosTop;
jQuery(".tg-whychooseus").revealOnScroll();
});
如果您删除对 "hidden" class 的引用并以类似这样的方式开始(我已经给出了内联样式但是 css 可能更好):
<div class="tg-whychooseus" style="opacity:0">WHY CHOOSE US ?</div>
如果添加具有 "display:none;"
属性的 ".hidden"
class,动画会运行,但元素仍然是 "display:none;"
,因此 class,这可能是该元素未显示的原因(我猜是因为您没有给出 html 或 css)。
祝插件好运(考虑 "throttling" 至少避免连续触发 onScroll,如果所有元素都有 class "animation-complete") 我希望这个帮助ps.
(ps 这里 "throttling" 上有一篇文章 How to Throttle Scroll Events)
(pps 我重新整理了你的代码,以提供一种不同的方法来使其工作(但我确信它可以变得更有效率,而且我还没有测试显示的逻辑多个 div - 你也许可以看看那个)。我建议你仔细阅读它,并参考你可以找到的一些其他代码来尝试做同样的事情,而且,没有真正的捷径,你可能需要花一些时间了解插件的有时微妙的概念。它并不总是直截了当的,而且一如既往,通常最好从非常简单的地方开始构建。网络上有资源,但它们非常零散)。
Html:
<div class="tg-whychooseus" style="opacity:0;">WHY CHOOSE US ?</div>
脚本(带注释):
// Function invoked immediately
!function () {
// Put any code here for before document.ready
// When document ready
$(function () {
// Get collection of revealItems
var revealItems = $(".tg-whychooseus");
// Adjust revealItems when document.ready, before scrolling
// (Not sure why you need this - why not hard code this in to html?)
$.each(revealItems, function () {
if (!jQuery(this).hasClass("hidden")) {
jQuery(this).css("opacity", 0).addClass("hidden");
}
});
// Whenever there is a scroll event
jQuery(window).scroll(function () {
// You should consider "throttling" these events
// to kick in shortly after a scroll event has completed
// rather than continuously => logic here not checked
var windowHeight = jQuery(window).height();
var windowScrollPosTop = jQuery(window).scrollTop();
var windowScrollPosBottom = windowHeight + windowScrollPosTop;
// Iterate through the collection of revealItems
revealItems.each(function () {
if (!jQuery(this).hasClass("animation-complete")) {
// When to animate logic (not tested), and note you've incurred overhead just to get to this point for each scroll event
var objectOffset = jQuery(this).offset();
var objectOffsetTop = objectOffset.top;
if (windowScrollPosBottom > objectOffsetTop) {
if (!jQuery(this).hasClass("animation-complete")) {
// Animate
$(this).animate({
opacity: 1
}, 3000, function () {
// When animation is complete
$(this).addClass("animation-complete");
});
}
}
}
});
});
});
}();
我希望这个帮助ps。