文章导航

JavaScript clearInterval()

2019-1-6 00:07| 作者: admin| 查看: 1388| 评论: 0|来自: 蚂蚁部落

定时器方法setInterval可以规定每隔指定时间,周期性执行回调函数。

默认状态,如果不关闭浏览器,定时器方法将永远执行下去。

实际项目中,更多时候会根据需要来决定定时器方法是否继续执行。

此时,本文的主角clearInterval方法的功能将得以体现,它可以停止setInterval定时器方法的执行。

从clearInterval方法的名称也可以看出它与setInterval方法的关系,注意这一点可能有助于记忆。

本文首先分享clearInterval基本用法,然后结合代码实例介绍一下此方法实际应用中需要特别注意的地方。

关于setInterval用法内容可以参阅JavaScript setInterval()一章节。

语法结构:

[JavaScript] 纯文本查看 复制代码
clearInterval(id)

参数解析:

(1).id:必需,将要被停止运行的setInterval函数的返回值,它是当前定时器方法的唯一标识。

clearInterval方法属于window对象,凡是window对象的方法都可以直接使用,无需使用window调用。

更多内容参阅JavaScript window 对象一章节。

浏览器支持:

(1).IE浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).谷歌浏览器支持此方法。

(4).opera浏览器支持此方法。

(5).火狐浏览器支持此方法。

(6).safria浏览器支持此方法。

代码实例:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
#num{
  width:60px;
  text-align:center;
  color:red;
}
</style>
<script>
window.onload = function () {
  let count = 0;
  let odiv=document.getElementById("num");
  let obt=document.getElementById("bt");
  function done(){
    odiv.innerHTML = count;
    count = count + 1;
  }
  let flag = setInterval(done, 1000);
  obt.onclick = function () {
    clearInterval(flag);
  }
}
</script>
</head>
<body>
<div id="num">0</div>
<input type="button" id="bt" value="停止计数"/>
</body>
</html>

通过setInterval方法实现数字累加效果,点击按钮可以停止定时器函数的执行。

代码分析如下:

(1).setInterval每隔1000毫秒调用一次回调函数done,由此实现了数字累加效果。

(2).定时函数调用的时候会返回一个值,此值是当前定时器函数的唯一标识。

(2).标识与定时器函数一一对应,两次定时器函数的调用返回的标识是不同的。

(3).点击按钮后,执行事件处理函数,通过clearInterval函数停止与标识对应的定时器函数的执行。

上述代码简单且直白,再来看一段稍微复杂一些代码:

[HTML] 纯文本查看 复制代码运行代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
* {
  padding: 0;
  margin: 0;
}
#box {
  height: 200px;
  width: 200px;
  background: red;
  position: absolute;
  top: 0;
  left: -200px;
}
span {
  right: -20px;
  top: 50%;
  position: absolute;
  width: 20px;
  background: green;
}
</style>
<script>
window.onload=function(){
  let oBox=document.getElementById('box');
  let time=null;
  function startMove(offset){
    clearInterval(time);
    time=setInterval(function(){
      let speed=(offset-oBox.offsetLeft)/10;
      speed=speed>0?Math.ceil(speed):Math.floor(speed);
      if(oBox.offsetLeft==offset){
        clearInterval(time);
      }else{
        oBox.style.left=oBox.offsetLeft+speed+'px'
      }
    },30)
  }
  oBox.onmouseover=function(){
    startMove(0)
  };
  oBox.onmouseout=function(){
    startMove(-200)
  };
}
</script>
</head>
<body>
<div id="box">
  <span>查看</span>
</div>
</body>
</html>

上述代码实现了侧边栏展开与收缩功能,里面有clearInterval方法的应用,下面进行一下分析。

(1).默认div元素隐藏在左侧,仅显示它的span子元素。

(2).鼠标悬浮,div元素会从左侧逐渐展现出来,当完全展现完毕,clearInterval停止定时器方法的执行,很容易理解。

(3).鼠标离开的时候,div会逐渐隐藏起来,完全隐藏完毕,clearInterval停止定时器方法的执行。

(4).上面都是展开和收缩完全完成的情况,但是还有一种情况,当div尚未完全展示出来的时候,鼠标离开,此时向外展开的定时器方法正在执行,又要开始一个收缩的定时器方法,所要首先停止向外展开的定时器方法,否则会造成收缩与展开同时存在的现象,那么div快可能就会左右抖动现象,这就是函数startMove内顶部调用clearInterval方法的作用,所以在编写代码的时候要考虑周全,防止出现一些意想不到的现象。

上述代码用到了若干比较常用的JavaScript方法或者属性,本文不做介绍,具体参阅如下几篇文章:

(1).offsetLeft属性参阅JavaScript offsetLeft一章节。

(2).Math.ceil方法参阅JavaScript Math.ceil()一章节。

(3).Math.floor方法参阅JavaScript Math.floor()一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部