javascript - 在 Javascript 中使用 localStorage 仅向新用户或 30 分钟后返回的用户显示模式
问题描述
正如问题的声音一样,我网站的每个 html 页面上都有一个弹出模式。我想向我的网站的新用户或已经访问过我的网站并在 30 分钟会话后再次访问的用户展示该模式。我想用 JS 中的 localStorage 来做(没有 JQuery)。
这是JS代码 -
const body = document.querySelector("body");
const modal = document.querySelector(".modal");
const closeButton = document.querySelector(".close-button");
const skipOptinForm = document.querySelector(".skip-optin-form-text");
let isOpened = false;
function updateModalSession() {
localStorage.setItem("visitTime", getTimestampSeconds());
}
function getTimestampSeconds() { // Returns the unix timestamp in seconds
var time_stamp = 0;
if(time_stamp = Math.floor(Date.now() / 1000)){}
else
time_stamp = Math.floor(new Date().getTime() / 1000);
return time_stamp;
}
function getModalShowPermission() {
var currentTimeStamp = getTimestampSeconds();
var storedTimeStamp = parseInt(localStorage.getItem("visitTime"));
if(localStorage.getItem("visitTime") == "null") {
console.log("New User. modal show permision granted");
return true;
} else if((currentTimeStamp - storedTimeStamp) >= 1800) {
console.log("Returning User after 30 mins session. modal show permision granted");
return true;
} else {
console.log("Not new nor returning after 30 mins session. modal show permision denied");
return false;
}
}
const openModal = () => {
if(getModalShowPermission() == true) {
updateModalSession();
modal.classList.add("is-open");
body.style.overflow = "hidden";
}
};
const closeModal = () => {
modal.classList.remove("is-open");
body.style.overflow = "initial";
};
window.addEventListener("scroll", () => {
if (window.scrollY > window.innerHeight / 3 && !isOpened) {
isOpened = true;
openModal();
}
});
closeButton.addEventListener("click", closeModal);
skipOptinForm.addEventListener("click", closeModal);
document.onkeydown = evt => {
evt = evt || window.event;
evt.keyCode === 27 ? closeModal() : false;
};
该代码适用于老用户,但不适用于新用户。上面的代码没有向新用户显示模式。
解决方案
问题在于第一个 if 子句 -
if(localStorage.getItem("visitTime") == "null")
if 条件应该是 -
if(localStorage.getItem("visitTime") == null)
localStorage.getItem(key)
当密钥在存储中不可用时返回null
和,
localStorage.getItem(key)
当密钥在存储中可用时返回字符串
推荐阅读
- javascript - 使用可点击选项时,文件显示在错误的拖放区中
- r - 根据 f 循环遍历名称
- c - 错误:使用选择排序时分配给具有数组类型的表达式
- pandas - Pandas Dataframe:将列条目除以出现次数
- angular - 绑定到没有 EventEmitter 的输出组件。可能吗?
- html - 当我尝试制作表格时,html_output 给了我一个 NULL 响应
- javascript - 使用 fetch 更新状态,然后在 useEffect 中使用状态不起作用
- java - 使用 Java 中的 Solrj 连接到 Solr 时出错
- python-3.x - 检查数据框中的行是否大致对应
- python - 如何将 OpenCV 阈值方法应用于 Skimage 方法输出的形态图像?