停止JavaScript中的功能

时间:2018-09-11 18:21:30

标签: javascript

我实现了一个<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); 功能?

1 个答案:

答案 0 :(得分:1)

@Phiter建议的解决方案将起作用,即您可以在包含标志ResetTime的范围内定义modalIsOpen,然后按以下方式对其进行定义:

function ResetTime() {
  if (modalIsOpen) {
    return;
  }

  timer = SetLastResetTimeStamp((new Date()).getTime());
}

但是,我认为打开模态时分离事件并在其关闭时重新附加事件会更干净。这将阻止该函数首先被调用。即假设您有两个函数onModalOpenonModalClose,还有一个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(或大多数编程语言)的功能。您只能阻止它们执行(例如,提早返回错误,抛出错误或根本不首先调用它们)。