我实现了一个<script src="https://sdks.shopifycdn.com/js-buy-sdk/v1/latest/index.umd.min.js"></script>
函数,一旦调用了模态,我需要停止该函数。 ResetTime
函数用于会话超时。每次与用户互动时,时间都会重置。
ResetTime
功能
ResetTime
用户互动检查:
function ResetTime() {
timer = SetLastResetTimeStamp((new Date()).getTime());
}
function SetLastResetTimeStamp(timeStamp) {
if (_localStorage) {
_localStorage[_localStorageKey] = timeStamp;
} else {
_lastResetTimeStamp = timeStamp;
}
}
是否可以在其他功能中停止AttachEvent(document, 'click', ResetTime);
AttachEvent(document, 'mousemove', ResetTime);
AttachEvent(document, 'keypress', ResetTime);
AttachEvent(window, 'load', ResetTime);
功能?
答案 0 :(得分:1)
@Phiter建议的解决方案将起作用,即您可以在包含标志ResetTime
的范围内定义modalIsOpen
,然后按以下方式对其进行定义:
function ResetTime() {
if (modalIsOpen) {
return;
}
timer = SetLastResetTimeStamp((new Date()).getTime());
}
但是,我认为打开模态时分离事件并在其关闭时重新附加事件会更干净。这将阻止该函数首先被调用。即假设您有两个函数onModalOpen
和onModalClose
,还有一个DetachEvent
函数可以从相应的EventTarget
中删除事件:
const onModalOpen = () => {
DetachEvent(document, 'click', ResetTime);
DetachEvent(document, 'mousemove', ResetTime);
DetachEvent(document, 'keypress', ResetTime);
DetachEvent(window, 'load', ResetTime);
// ...
}
const onModalClose = () => {
AttachEvent(document, 'click', ResetTime);
AttachEvent(document, 'mousemove', ResetTime);
AttachEvent(document, 'keypress', ResetTime);
AttachEvent(window, 'load', ResetTime);
// ...
}
注意:尽管解除绑定和重新绑定事件处理程序并非没有争议(请参见this answer)。
作为旁注,您不能停止使用JavaScript(或大多数编程语言)的功能。您只能阻止它们执行(例如,提早返回错误,抛出错误或根本不首先调用它们)。