jquery - jQuery:在延迟或滚动时打开模式
问题描述
我有一个使用 fancybox 的模态。
我的客户希望它在延迟后出现,或者一旦他们向下滚动到特定的 div。
他们还希望每个会话只触发一次,在这种情况下每天一次。
我让所有这些东西大部分都独立工作,但我似乎无法将所有东西放在一起。我知道我的 JS 是有限的,所以我确定我错过了一些简单的东西。
基本上,我希望代码是:
- 等待。如果您不滚动,请在延迟后关闭模式。
- 如果模式没有延迟触发,请在向下滚动后触发它。
- 一天内不要再开火。
在滚动功能上,这似乎也触发了不止一次……您到达该部分,但是如果您继续滚动,它将再次触发,从而导致“找不到内容”错误。
我的代码在下面,这里有一个测试页面:https ://mayeswilsonassociates.com/code-testing-page/
谁能帮我解决这个问题?
if (window.localStorage) {
var nextPopup = localStorage.getItem('nextNewsletter');
var expires = new Date();
expires = expires.setHours(expires.getHours() + 24);
// This is then function used to detect if the element is scrolled into view
function elementScrolled(elem) {
var docViewTop = $(window).scrollTop();
var docViewBottom = docViewTop + $(window).height();
var elemTop = $(elem).offset().top + 750;
return ((elemTop <= docViewBottom) && (elemTop >= docViewTop));
}
function newsletterDelay() {
if (nextPopup < new Date()) {
setTimeout(function() {
$.fancybox.open({
src: '#mc-popup #mc_embed_signup',
type: 'inline',
});
}, 4500);
localStorage.setItem('nextNewsletter', expires);
};
};
function newsletterScroll() {
if (nextPopup < new Date()) {
$(window).scroll(function() {
if (elementScrolled('#section-services')) {
$.fancybox.open({
src: '#mc-popup #mc_embed_signup',
type: 'inline',
});
localStorage.setItem('nextNewsletter', expires);
}
});
};
};
};
newsletterDelay();
newsletterScroll();
解决方案
推荐阅读
- casting - db2中的CONVERT或CAST,如何将列从char转换为十进制
- android - 从谷歌地图获取带有标记的位置图像(免费)
- angularjs - 为什么 ng-show、ng-hide 和 ng-init 甚至不起作用
- rust - 如何实现分层特征?
- python - 为什么我的 Scikit-Learn 线性回归模型仅适用于某些随机状态?
- java - 在Java中使用二维数组打印一个对角线的矩形
- javascript - 在 javascript 中传递多个变量的更简洁的方法
- python - Python 请求 API - 无结果
- react-native - 如何使用 Realm javascript 注销?
- java - IntelliJ 调试器认为我的 Stack 实际上比它小一个元素?