javascript - 单击按钮删除计时器

标签 javascript jquery html css timer

我有一个弹出窗口,它在页面加载时自动加载,它的关闭按钮上有一个计时器,其时间根据用户查看弹出窗口的次数而变化。它还具有一个打印按钮,如果您按“g”键,则可以调用弹出窗口。

我的注意力集中在“打印”按钮上。如果单击“打印”按钮,我希望计时器的值永远为 0,也就是永远消失。我已经尝试过 clearInterval() 但似乎没有效果,而且我找不到其他任何东西来帮助我。

请注意,计时器在代码片段或 fiddle 中似乎不起作用。尽管当我创建 HTML 文件时它确实可以在我的浏览器中工作。请注意,计时器由 counter 变量控制。我的代码如下:

$(document).ready(function() {
  $(document).keypress(function(e) {
    if (e.charCode === 65 || 103) {
      $('#PopUp').css("visibility", "visible");
      $('#PopUp').css("opacity", 1);
    }
  });
  
  $(function() {
    $('#PopUp').css("visibility", "visible");
    $('#PopUp').css("opacity", 1);
  });

  $(".close").click(function() {
    $('#PopUp').css("visibility", "hidden");
    $('#PopUp').css("opacity", 0);
  });
});

function printDiv() {
  var content = document.getElementById('content').innerHTML;
  var win = window.open();
  win.document.write(content);
  win.print(); // JavaScript Print Function
  win.close(); //It will close window after Print.
}

// initialization
var counter = 60;
var timesVisited = 0;
var cookieExpirationDays = 7; // don't expire cookies for a week
// test to see if localstorage/sessionStorage is available (localStorage has no expiration date)

if (typeof(Storage) !== "undefined") {
  counter = 60;
  timesVisited = localStorage.getItem("timesVisited");
  // first time
  if ((timesVisited == 0) || (timesVisited < 1)) {
    timesVisited = 1;
    localStorage.setItem("timesVisited", timesVisited);
    counter = 60;
  }
  // second time
  else if ((timesVisited >= 1) && (timesVisited <= 3)) {
    timesVisited++;
    localStorage.setItem("timesVisited", timesVisited);
    counter = 45;
  }
  // third time
  else if ((timesVisited >= 4) && (timesVisited <= 8)) {
    timesVisited++;
    localStorage.setItem("timesVisited", timesVisited);
    counter = 30;
  }
  // fourth time
  else if ((timesVisited >= 9) && (timesVisited <= 13)) {
    timesVisited++;
    localStorage.setItem("timesVisited", timesVisited);
    counter = 15;
  }
  // fifth time
  else if (timesVisited >= 14) {
    timesVisited++;
    localStorage.setItem("timesVisited", timesVisited);
    counter = 5;
  }
}
// No localstorage/sessionStorage. Use cookies 
else {
  timesVisited = getCookie("timesVisited");
  console.log(timesVisited);
  // first time
  if ((timesVisited == "") || (timesVisited < 1)) {
    timesVisited = 1;
    setCookie("timesVisited", timesVisited, cookieExpirationDays);
    counter = 60;
  }
  // second time
  else if ((timesVisited >= 1) && (timesVisited <= 3)) {
    timesVisited++;
    setCookie("timesVisited", timesVisited, cookieExpirationDays);
    counter = 45;
  }
  // third time
  else if ((timesVisited >= 4) && (timesVisited <= 8)) {
    timesVisited++;
    setCookie("timesVisited", timesVisited, cookieExpirationDays);
    counter = 30;
  }
  // fourth time
  else if ((timesVisited >= 9) && (timesVisited <= 13)) {
    timesVisited++;
    setCookie("timesVisited", timesVisited, cookieExpirationDays);
    counter = 15;
  }
  // fifth time
  else if (timesVisited >= 14) {
    timesVisited++;
    setCookie("timesVisited", timesVisited, cookieExpirationDays);
    counter = 5;
  }
}
var setMsg = setInterval(function() {
  counter--;
  if (counter >= 60 && counter >= 70) {
    $("#close-message").html("1:" + (counter - 60));
  } else if (counter >= 60 && counter < 70) {
    $("#close-message").html("1:0" + (counter - 60));
  } else if (counter >= 10) {
    $("#close-message").html("0:" + counter);
  } else if (counter > 0) {
    $("#close-message").html("0:0" + counter);
  } else {
    $(".close").click(function() {
      $('#PopUp').css("visibility", "hidden");
      $('#PopUp').css("opacity", 0);
    });
    $("#timer").remove();
    clearInterval(setMsg);
  }
}, 1000);
});
.t {
  -webkit-transform-origin: top left;
  -moz-transform-origin: top left;
  -o-transform-origin: top left;
  -ms-transform-origin: top left;
  -webkit-transform: scale(0.25);
  -moz-transform: scale(0.25);
  -o-transform: scale(0.25);
  -ms-transform: scale(0.25);
  z-index: 2;
  position: absolute;
  white-space: pre;
  overflow: visible;
}

#t1_1 {
  left: 256px;
  top: 35px;
  letter-spacing: 0.1px;
}

#t2_1 {
  left: 334px;
  top: 87px;
  word-spacing: -0.1px;
}

#t3_1 {
  left: 210px;
  top: 123px;
}

#t4_1 {
  left: 238px;
  top: 123px;
  word-spacing: -0.3px;
}

#t5_1 {
  left: 210px;
  top: 141px;
}

#t6_1 {
  left: 210px;
  top: 160px;
}

#t7_1 {
  left: 210px;
  top: 179px;
}

#t8_1 {
  left: 238px;
  top: 141px;
  letter-spacing: -0.1px;
  word-spacing: -0.1px;
}

#t9_1 {
  left: 238px;
  top: 160px;
  word-spacing: -0.1px;
}

#ta_1 {
  left: 238px;
  top: 179px;
  word-spacing: -0.1px;
}

#tb_1 {
  left: 343px;
  top: 242px;
  letter-spacing: -0.1px;
}

#tc_1 {
  left: 210px;
  top: 278px;
}

#td_1 {
  left: 210px;
  top: 297px;
}

#te_1 {
  left: 210px;
  top: 315px;
}

#tf_1 {
  left: 210px;
  top: 334px;
}

#tg_1 {
  left: 238px;
  top: 278px;
  word-spacing: -0.1px;
}

#th_1 {
  left: 238px;
  top: 297px;
  word-spacing: -0.1px;
}

#ti_1 {
  left: 238px;
  top: 315px;
  word-spacing: -0.2px;
}

#tj_1 {
  left: 238px;
  top: 334px;
  word-spacing: -0.1px;
}

#tk_1 {
  left: 286px;
  top: 393px;
  word-spacing: -0.1px;
}

#tl_1 {
  left: 210px;
  top: 429px;
}

#tm_1 {
  left: 210px;
  top: 448px;
}

#tn_1 {
  left: 210px;
  top: 466px;
}

#to_1 {
  left: 210px;
  top: 485px;
}

#tp_1 {
  left: 238px;
  top: 429px;
  word-spacing: -0.3px;
}

#tq_1 {
  left: 238px;
  top: 448px;
  word-spacing: -0.1px;
}

#tr_1 {
  left: 238px;
  top: 466px;
  word-spacing: -0.1px;
}

#ts_1 {
  left: 238px;
  top: 485px;
  word-spacing: -0.2px;
}

#tt_1 {
  left: 326px;
  top: 544px;
  letter-spacing: -0.1px;
}

#tu_1 {
  left: 210px;
  top: 580px;
}

#tv_1 {
  left: 210px;
  top: 599px;
}

#tw_1 {
  left: 210px;
  top: 618px;
}

#tx_1 {
  left: 238px;
  top: 618px;
}

#ty_1 {
  left: 210px;
  top: 636px;
}

#tz_1 {
  left: 238px;
  top: 636px;
}

#t10_1 {
  left: 210px;
  top: 655px;
}

#t11_1 {
  left: 238px;
  top: 580px;
  word-spacing: -0.1px;
}

#t12_1 {
  left: 238px;
  top: 599px;
  word-spacing: -0.2px;
}

#t13_1 {
  left: 238px;
  top: 655px;
  word-spacing: -0.1px;
}

#t14_1 {
  left: 264px;
  top: 716px;
  word-spacing: -0.2px;
}

#t15_1 {
  left: 210px;
  top: 752px;
}

#t16_1 {
  left: 210px;
  top: 771px;
}

#t17_1 {
  left: 210px;
  top: 789px;
}

#t18_1 {
  left: 210px;
  top: 808px;
}

#t19_1 {
  left: 238px;
  top: 752px;
  word-spacing: -0.1px;
}

#t1a_1 {
  left: 238px;
  top: 771px;
  word-spacing: -0.1px;
}

#t1b_1 {
  left: 238px;
  top: 789px;
  word-spacing: -0.2px;
}

#t1c_1 {
  left: 238px;
  top: 808px;
  word-spacing: -0.1px;
}

.s1_1 {
  FONT-SIZE: 85.4px;
  FONT-FAMILY: Arial;
  color: rgb(0, 0, 0);
  FONT-WEIGHT: bold;
}

.s2_1 {
  FONT-SIZE: 61.2px;
  FONT-FAMILY: Arial;
  color: rgb(0, 0, 0);
  FONT-WEIGHT: bold;
}

.s3_1 {
  FONT-SIZE: 61.2px;
  FONT-FAMILY: SymbolMT_1z5;
  color: rgb(0, 0, 0);
}

.s4_1 {
  FONT-SIZE: 61.2px;
  FONT-FAMILY: Arial;
  color: rgb(0, 0, 0);
}

div {
  padding-top: 10px;
}

.button {
  font-size: 1em;
  padding: 10px;
  color: #fff;
  border: 2px solid orange;
  border-radius: 20px/50px;
  text-decoration: none;
  cursor: pointer;
  transition: all 0.3s ease-out;
}

.button:hover {
  background: orange;
}

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.7);
  transition: opacity 500ms;
  visibility: visible;
  opacity: 1;
  height: 578%;
  width: 117.5%;
}

.overlay:target {
  visibility: hidden;
  opacity: 0;
  display: none;
}

.PopUp {
  margin: 50px auto;
  padding: 0px;
  background: #fff;
  border-radius: 5px;
  width: 60%;
  position: relative;
  transition: all 5s ease-in-out;
}

.PopUp .close {
  position: absolute;
  top: 20px;
  right: 30px;
  transition: all 200ms;
  font-size: 30px;
  font-weight: bold;
  text-decoration: none;
  color: #333;
}

.PopUp .close:hover {
  color: orange;
}

.PopUp .content {
  max-height: 117.5%;
  overflow: auto;
}

.pdf1 {
  width: 935px;
  height: 1210px;
  background-color: white;
  -moz-transform: scale(1);
  z-index: 0;
  border: none;
}

button {
  background-color: Transparent;
  background-repeat: no-repeat;
  border: none;
  cursor: pointer;
  overflow: hidden;
  outline: none;
  font-family: "Open Sans", sans-serif;
  font-weight: 700;
  color: #2D2D2D;
  font-size: 1rem;
  line-height: 1;
  text-align: center;
}

.Print {
  padding-bottom: 10px;
  margin-top: -5px;
}

.close-message {
  font-family: "Open Sans", sans-serif;
  font-weight: 700;
  color: black;
  font-size: 0.9rem;
  line-height: 1;
  position: absolute;
  top: 15px;
  left: 9px;
}

.timer {
  position: absolute;
  top: 5px;
  right: 20px;
  z-index: 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="PopUp" class="overlay">
  <div class="PopUp">
    <div class="timer" id="timer"><img src="http://i.imgur.com/87XaOWA.png">
      <p class="close-message" id="close-message"></p>
    </div>
    <a class="close" href="#">&#10005;</a>
    <div class="content">
      <div id="p1" class="p1" style="overflow: hidden; position: relative; width: 885px; height: 878px;">
        <!-- Begin page background -->
        <div id="pg1Overlay" style="width:100%; height:100%; position:absolute; z-index:1; background-color:rgba(0,0,0,0); -webkit-user-select: none;"></div>
        <div id="pg1" class="pg1" style="-webkit-user-select: none;"><img src="http://i.imgur.com/vcY42CW.png" id="pdf1" class="pdf1"></img>
        </div>
        <!-- End page background -->

        <!-- Begin text definitions (Positioned/styled in CSS) -->
        <div id="t1_1" class="t s1_1">Player Selection Criteria Evaluator Cue Card</div>
        <div id="t2_1" class="t s2_1">Skating – speed, quickness, technique</div>
        <div id="t3_1" class="t s3_1">♦</div>
        <div id="t4_1" class="t s4_1">Forward and Backward</div>
        <div id="t5_1" class="t s3_1">♦</div>
        <div id="t6_1" class="t s3_1">♦</div>
        <div id="t7_1" class="t s3_1">♦</div>
        <div id="t8_1" class="t s4_1">Turn both directions</div>
        <div id="t9_1" class="t s4_1">Stop both directions</div>
        <div id="ta_1" class="t s4_1">Are they in a good position for stability and strength</div>
        <div id="tb_1" class="t s2_1">Passing – technique, control, vision</div>
        <div id="tc_1" class="t s3_1">♦</div>
        <div id="td_1" class="t s3_1">♦</div>
        <div id="te_1" class="t s3_1">♦</div>
        <div id="tf_1" class="t s3_1">♦</div>
        <div id="tg_1" class="t s4_1">Forehand and Backhand</div>
        <div id="th_1" class="t s4_1">To moving and stationary target</div>
        <div id="ti_1" class="t s4_1">Vision – do they take a look and select best option</div>
        <div id="tj_1" class="t s4_1">Advanced – board passes, chips, saucer passes</div>
        <div id="tk_1" class="t s2_1">Puck Control – technique, open ice, confined space</div>
        <div id="tl_1" class="t s3_1">♦</div>
        <div id="tm_1" class="t s3_1">♦</div>
        <div id="tn_1" class="t s3_1">♦</div>
        <div id="to_1" class="t s3_1">♦</div>
        <div id="tp_1" class="t s4_1">Open carry with speed</div>
        <div id="tq_1" class="t s4_1">Execute dekes and fakes on the 1 on 1</div>
        <div id="tr_1" class="t s4_1">Can they handle the puck in traffic and tight space</div>
        <div id="ts_1" class="t s4_1">Ability to maintain control while being stick checked</div>
        <div id="tt_1" class="t s2_1">Shooting – technique, accuracy, velocity</div>
        <div id="tu_1" class="t s3_1">♦</div>
        <div id="tv_1" class="t s3_1">♦</div>
        <div id="tw_1" class="t s3_1">♦</div>
        <div id="tx_1" class="t s4_1">Velocity</div>
        <div id="ty_1" class="t s3_1">♦</div>
        <div id="tz_1" class="t s4_1">Accuracy</div>
        <div id="t10_1" class="t s3_1">♦</div>
        <div id="t11_1" class="t s4_1">Forehand and backhand</div>
        <div id="t12_1" class="t s4_1">Wrist shot, snap shot, slap shot</div>
        <div id="t13_1" class="t s4_1">Shot Selection – do they select the best shot for the opportunity?</div>
        <div id="t14_1" class="t s2_1">Game Understanding – Principles of Offence and Defence</div>
        <div id="t15_1" class="t s3_1">♦</div>
        <div id="t16_1" class="t s3_1">♦</div>
        <div id="t17_1" class="t s3_1">♦</div>
        <div id="t18_1" class="t s3_1">♦</div>
        <div id="t19_1" class="t s4_1">Player understands positional play</div>
        <div id="t1a_1" class="t s4_1">Player supports the puck on the defensive and offensive side of puck</div>
        <div id="t1b_1" class="t s4_1">Player communicates with teammates</div>
        <div id="t1c_1" class="t s4_1">Player has the ability to read and react.</div>
      </div>
    </div>
    <div id="Print" class="Print" align="center">
      <button onclick="printDiv()"><img src="http://i.imgur.com/HcXNoMC.png" /></button>
    </div>
  </div>
</div>

最佳答案

如果我正确理解您要执行的操作,那么您希望在单击“打印”时运行 clearInterval(setMsg)printDiv() 是“打印”按钮单击事件的处理程序,printDiv() 中没有调用 clearInterval(setMsg)。一种方法是创建一个函数来执行摆脱计时器所需的所有操作 - 然后您可以在 1) 计时器用完或 2) 单击“打印”时调用它。如果您也不希望在用户回来时出现计时器,则必须在 printDiv() 函数的 localStorage 中设置 timesVisited (或设置 cookie)。尝试以下操作。我试图简化如何设置计数器和存储访问时间的逻辑,并且还排除了存储的 cookie 替代方案,只是为了简化调试问题:

function printDiv()
{
    endTimer();
    localStorage.setItem('timesVisited', 4);
}

// initialization
var counter = 60;
var timesVisited = 0;
var cookieExpirationDays = 7;    // don't expire cookies for a week
// test to see if localstorage/sessionStorage is available (localStorage has no expiration date)

// Uncomment below to reset localStorage for testing
//localStorage.removeItem('timesVisited');

if (typeof(Storage) !== "undefined") {
    counter = 60;
    timesVisited = localStorage.getItem("timesVisited");
    if (!timesVisited) {
      timesVisited = 0;
    } else {
      timesVisited++;
    }
    localStorage.setItem("timesVisited", timesVisited);
    counter = Math.max(0,60-(15*timesVisited));  
} 

  function endTimer() {
      $( ".close" ).click(function() {
        $('#PopUp').css("visibility", "hidden"); 
        $('#PopUp').css("opacity", 0);
      });
      $("#timer").remove();
      clearInterval(setMsg);
  }

  var setMsg = setInterval(function() {
    counter--;
    if(counter >= 60 && counter >= 70) {
      $("#close-message").html("1:" + (counter - 60));
    } else if(counter >= 60 && counter < 70) {
      $("#close-message").html("1:0" + (counter - 60));
    } else if(counter >= 10) {
      $("#close-message").html("0:" + counter);
    } else if (counter > 0) {
      $("#close-message").html("0:0" + counter);
    } else {
      endTimer();
    }
  }, 1000);

关于javascript - 单击按钮删除计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684882/

相关文章:

javascript - JavaScript 中的对象返回自身

javascript - jquery 的多个 .load() 事件冲突

javascript - 向多个 Select 元素添加选项

javascript - Knockout 绑定(bind)使 html(表格单元格)膨胀,如何使用 javascript 创建绑定(bind)或从父元素绑定(bind)?

javascript - 没有在tinyMCE编辑器中获得更新的测试

javascript - RegExp 中的无效正则表达式错误

javascript - 如何检测浏览器何时将存储的密码输入到 Web 登录中

javascript - jQuery 鼠标悬停效果不起作用

javascript - 如何检查php网站是否完全加载了JS

javascript - 拖动时设置滚动条不透明度?