JS学习笔记五: Js中的定时器操作

JS学习笔记五: Js中的定时器操作

定时器

  1. js中定时器用于定时清理或者定时请求用的。分为间隔性定时器和延时性定时器。

间隔型定时器:就是每隔一段时间就会执行一下。

延时型定时器:就是让一个方法等待一段时间才开始执行,但是只会执行一次。

  1. 定时器函数

1、间隔型定时器

setInterval(fun,time)

fun():是执行的函数,time为间隔执行的时间,单位为毫秒,每过time时间就执行一次fun里面的代码。

2、延时型定时器

setTimeout(fun,time)

fun为执行函数

time为延时执行的时间,单位为毫秒,经过time时间后执行fun代码,只执行一次。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript">
            setTimeout(function(){
                alert("我是延时三秒执行的函数")
            },3000)

            setInterval(function(){
                alert("我是间隔三秒执行的函数")
            },3000)
        </script>
    </body>
</html>

定时器的清除

  1. 为什么要清除定时器

可能会遇到这种业务:需要定时器不断的请求,当遇到某个值时就停止请求,也就是停止定时器操作。

  1. 清除间隔型定时器

clearInterval()

  1. 清除延时型定时器

clearTimeout()

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <script type="text/javascript">
            //清除定时器
            //创建间隔型定时器
            var timer1=setInterval(function(){
                console.log("我是间隔型定时器")
                //clearTimeout(timer2)
            },3000)
            //创建延时型定时器
            var timer2=setTimeout(function(){
                console.log("我是延时型定时器")
                clearInterval(timer1)
            },4000)
        </script>
    </body>
</html>

定时器延时实例

  1. 当我们的鼠标移入小div的时候,会有一个弹窗大div显示在隔壁,鼠标离开两个div的时候弹窗div延时消失。

逻辑:

1、当鼠标移入div1时,显示div2事件。

2、当鼠标移出div1时,div2需要延时退出。

3、当鼠标离开div1在div2延时t退出时间内进入div2时,此时需要清除延时定时器,否则鼠标落在div2仍然会退出。

4、当鼠标离开div2,后div2延时退出。

5、当鼠标离开div2,又跑到div1时,需要将div2上的延时定时器清除。这样落在div1仍然会显示div2.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            #div1{
                float: left;
                width: 50px;
                height: 50px;
                background: red;

            }
            #div2{
                float: left;
                width: 200px;
                height: 200px;
                background: black;
                display:none;
            }
        </style>
    </head>
    <body>
        <div id="div1"></div>
        <div id="div2"></div>
        <script type="text/javascript">
            window.onload=function(){
                var oDiv1=document.getElementById('div1')
                var oDiv2=document.getElementById('div2')
                var timer=null 
                //给div1添加鼠标移入事件2
                oDiv1.onmouseover=function(){
                    //改变oDiv2的display
                    clearTimeout(timer)
                    oDiv2.style.display='block'
                }
                oDiv1.onmouseout=function(){
                    timer=setTimeout(function(){
                        oDiv2.style.display='none'
                    },500)
                }
                oDiv2.onmouseover=function(){
                    //改变oDiv2的display
                    oDiv2.style.display='block'
                    clearTimeout(timer)
                }

                oDiv2.onmouseout=function(){
                    timer=setTimeout(function(){
                        oDiv2.style.display='none'
                    },500)
                }
            }
        </script>
    </body>
</html>

可以简化js的代码

oDiv2.onmouseover=oDiv1.onmouseover=function(){
    //改变oDiv2的display
    clearTimeout(timer)
    oDiv2.style.display='block'
}
oDiv2.onmouseout=oDiv1.onmouseout=function(){
    timer=setTimeout(function(){
        oDiv2.style.display='none'
    },500)
}

利用间隔性定时器制作无缝滚动图片

  1. 步骤

1、获取banner

2、获取ul无序列表

3、获取每个列表集合,并定义定时器

4、通过li标签获取ul的宽度。

5、通过间隔型定时器,让 ul一直往左走。

6、为了实现轮播,当第一次轮播完后再拼接一份ul

7、当第一次ul轮播完后让left值变为0,实现多次轮播

8、添加鼠标移动上去停止操作,无鼠标覆盖,继续操作。

9、精简代码。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            *{margin:0;padding: 0;}
            #banner{
                position: relative;
                width: 600px;
                height: 150px;
                margin:100px auto;
                overflow: hidden;
            }
            #banner ul{
                position: absolute;
                left: 0;
                top:0;
            }
            #banner li{
                float: left;
                width: 200px;
                height: 150px;
                list-style: none;
            }
            #banner li img{
                width: 200px;
                height: 150px;
            }
        </style>
    </head>
    <body>
        <div id="banner">
            <ul>
                <li><img src="img/1.png"></li>
                <li><img src="img/2.png"></li>
                <li><img src="img/3.png"></li>
                <li><img src="img/4.png"></li>
                <li><img src="img/5.png"></li>
                <li><img src="img/6.png"></li>
            </ul>
        </div>
        <script type="text/javascript">
            window.onload=function(){
                var oDiv=document.getElementById('banner')
                var oUl=oDiv.getElementsByTagName('ul')[0]
                var oLi=oUl.getElementsByTagName('li')
                var timer=null
                //拼接多一份ul里面的内容 这两种写法相等
                // oUl.innerHTML=oUl.innerHTML+oUl.innerHTML
                oUl.innerHTML+=oUl.innerHTML
                //计算ul的宽度
                oUl.style.width=oLi[0].offsetWidth*oLi.length+'px'
                function moving(){
                    //当left小于一半时,就设置为0重复滚动事件。
                    if(oUl.offsetLeft<-oUl.offsetWidth/2){
                        oUl.style.left='0'
                    }
                    //滚动速度为2px,其中offsetLeft为当前left的值,
                    oUl.style.left=oUl.offsetLeft-2+'px'
                }
                timer=setInterval(moving,30)
                oDiv.onmouseover=function(){
                    clearInterval(timer)
                }
                oDiv.onmouseout=function(){
                    //当鼠标离开30ms时就-2,就开始转动
                    timer=setInterval(moving,30)
                }
            }

        </script>
    </body>
</html>
发布了213 篇原创文章 · 获赞 201 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_33322074/article/details/104276917
今日推荐