成功:以下代码有效。当div滚动到视图中时,它将激活css(显示,动画等)。
问题:我只希望它触发一次(我不希望它再次隐藏或滚动过去时重置)。
以下是代码:
;(function($) {
$.outOfView = {
init: function() {
$("[data-outofview]").css('transition', 'none').addClass('outofview');
window.setTimeout(function(){
$("[data-outofview]").css('transition', '');
$.outOfView.scroll();
}, 100);
}
, scroll: function() {
var $window = $(window)
, scrolled = $(window).scrollTop()
, windowHeight = $(window).height();
$("[data-outofview].outofview").each(function() {
var $this = $(this)
, dataCoefficient = $(this).data('outofview-coefficient')
, coefficient = dataCoefficient ? parseInt(dataCoefficient, 10) / 100 : 1
, windowHeightPadded = windowHeight * coefficient
, offsetTop = $this.offset().top
, offsetBottom = offsetTop + $this.outerHeight() * coefficient;
// If the distance from the bottom of the element to the top of the document
// is greater than the distance from the top of the window to the top of the
// document, OR the distance from the top of the element is less than the distance
// from the bottom of the window to the top of the document... remove the class.
// The element is in view.
if ( scrolled < offsetBottom || scrolled + windowHeightPadded > offsetTop) {
if ($this.data('outofview-timeout')) {
window.setTimeout(function() {
$this.removeClass('outofview');
}, parseInt($this.data('outofview-timeout'), 10));
} else {
$this.removeClass('outofview');
}
}
});
// Hidden...
$("[data-outofview]:not(.outofview)").each(function () {
var $this = $(this)
, dataCoefficient = $(this).data('outofview-coefficient')
, coefficient = dataCoefficient ? parseInt(dataCoefficient, 10) / 100 : 1
, windowHeightPadded = windowHeight * coefficient
, offsetTop = $this.offset().top
, offsetBottom = offsetTop + $this.outerHeight() * coefficient;
// If the distance from the bottom of the element to the top of the document
// is less than the distance from the top of the window to the top of the
// document, OR the distance from the top of the element is greater than the distance
// from the bottom of the window to the top of the document... add the class.
// The element is out of view.
if ( scrolled > offsetBottom || scrolled + windowHeightPadded < offsetTop) {
$(this).addClass('outofview');
}
});
}
};
// Reveal animations as they appear on screen
$(window).on('scroll', $.outOfView.scroll);
$.outOfView.init();
})(jQuery);
非常感谢您提供的任何帮助。虽然我之前有自定义代码,但我不是专家。
答案 0 :(得分:0)
尝试访问此链接Popup on website load once per session
我认为这是您使用sessionStorage
时所需要的,我以前尝试过此操作并且正常工作。
答案 1 :(得分:0)
我无法100%解决此问题,但我确实有一个可行的解决方案。
在它的核心,一旦项目不在视图中(滚动过去),我不希望再次隐藏div。结果,我删除了以下代码......
scrolled > offsetBottom ||
这实质上意味着脚本将仅在向下滚动时触发。除非您从div上方向下滚动页面,否则它不会再次隐藏/触发元素。