javascript-定时器的使用
  TEZNKK3IfmPf 2023年11月14日 44 0
小结

定时器,设置一次性定时任务,格式
定时器 = setTimeout(函数名,豪秒数)
注,返回值是一个数字,整数

定时器,解除一次性的定时任务,格式
clearTimeout(定时器)

定时器,创建一个定时执行任务
定时器 = setInterval(函数名,豪秒数)

定时器,取消定时执行的任务
clearInterval(定时器)


document对象,根据类名获取对象,请获取类名为"box"的标签对象
标签对象数组 = document.getElementsByClassName("box")


事件,鼠标悬停事件,当鼠标移动到oDiv标签对象上时,触发move函数,写出代码
oDiv.onmouseover = move
标签对象.onmouseover = 函数名
设置一次性定时器
setTimeout(函数名,豪秒数)

英文
set,设置
time,时间
out,超过
timeout,超过时间,超时,延时

setTimeout,设置延时

命名规则
js中,大部分方法都是小驼峰命名法
例如
parseInt等等

案例

<script>
    function run(){
        alert('runrun')
    }
 
    t = setTimeout(run, 2000)
</script>

效果
两秒后,执行run函数内的代码

关注setTimeout的返回值

代码

<script>
    function run(){
        alert('runrun')
    }

    t = setTimeout(run, 2000)
    alert(typeof t)
    alert(t)
    t2 = setTimeout(run, 6000)
    alert(typeof t2)
    alert(t2)

</script>

结论
setTimeout()返回值是number
具体的内容相当于是一个计数
从1开始
第一次运行的setTimeout值为1
第二次,为2

解除一次性的定时任务

用法

clearTimeout(定时器)

定时器,指的是setTimeoutt()的返回值

例子

<script>
    function run(){
        alert('runrun')
    }
 
    t = setTimeout(run, 2000)
    clearTimeout(t)
</script>

效果
当定时器未来的及触发函数时
就被解除了
什么也不会发生

设置定时执行的定时器

用法

setInterval(函数名,豪秒数)

英文
interval,间隔

setInterval,设置间隔

例子

<script>
    function run(){
        alert('runrun')
    }

    t = setInterval(run, 2000)
    // clearTimeout(t)
</script>

效果
每隔两秒钟
执行一次run函数

取消定时执行的定时器

用法

    clearInterval(定时器)

例子

<script>
    function run(){
        alert('runrun')
    }

    t = setInterval(run, 2000)
    clearInterval(t)
</script>

效果
没有任何效果
因为定时器被取消了

定时器的其它方面

函数名可用匿名函数代替

<script>

    t = setInterval(function () {
        alert('hihi')
    }, 2000)
    // clearInterval(t)
</script>

练习一,让盒子向右移动

代码

<script>

    window.onload = function () {
        // 搞一个变量记录当前的位置
        var iPos = 0
        // 搞个函数
        function move(){
            // 先获取DIV标签对象
            var oDiv = document.getElementsByTagName("div")[0]  // obj
            // 设置它的位置
            iPos+=1  //数据的修改
            oDiv.style.marginLeft = (iPos+"px")
        }
        // 搞个定时器
        t = setInterval(move,100)
    }
</script>

<style>
    div{
        background: red;
        /*margin:auto;*/
        width: 300px;
        height: 200px;
        /*margin-left: 100px;*/
    }
    
</style>

<div>
    我是DIV盒子
</div>

说明
本例通过margin-left来控制移动
同样,也可以通过定位的方式来移动
逻辑
先让盒子来一个相对定位
然后不断的修改盒子的left
odiv.style.left = 新的数据

练习二,盒子移动到一定阶段就停住

逻辑
加判断
验证当前的位置数值与最大允许位移的数据
如果当前位置超过了最大允许位移的位置,则清除定时器

<script>

    window.onload = function () {
        var iMaxNum = 50
        var iPos = 0
        function move(){
            var oDiv = document.getElementsByTagName("div")[0]  // obj
            iPos += 13
            oDiv.style.marginLeft = (iPos+"px")
            
            if (iPos >= iMaxNum){
                clearInterval(t)
            }
        }
        t = setInterval(move,100)
    }
</script>

<style>
    div{
        background: red;
        /*margin:auto;*/
        width: 300px;
        height: 200px;
        /*margin-left: 100px;*/
    }
    
</style>

<div>
    我是DIV盒子
</div>

两个字符串比较大小不准
javascript-定时器的使用_数据

练习三,左右移动的盒子

逻辑
移动的时候进行判断,根据当前的位置来判断
当实际的位置到达右侧最大的数值时,修改速度为负值。速度为负值的结果是,实际位置会越来越小。
实际的位置 = 之前实际的位置+速度
如果速度为负值,实际的位置数据就会越来越小

当实际位置到达左侧的最小值时,修改速度为正值。

实现

<script>

    window.onload = function () {
        var iMaxNum = 200
        var iPos = 0
        var speed = 13
        function move(){
            var oDiv = document.getElementsByTagName("div")[0]  // obj
            iPos += speed
            oDiv.style.marginLeft = (iPos+"px")
            if (iPos >= iMaxNum){
                speed = -13
            }
            if (iPos <= 0){
                speed = 13
            }
        }
        t = setInterval(move,100)
    }
</script>

<style>
    div{
        background: red;
        /*margin:auto;*/
        width: 300px;
        height: 200px;
        /*margin-left: 100px;*/
    }
    
</style>

<div>
    我是DIV盒子
</div>
目标轮播图

布局

解决浮动元素的问题
父容器感知不到浮动的子元素
解决办法
最简单的

在父容器的样式里新增加一个
overfflow:auto;

并不推荐使用
最标准的办法
伪元素

    .clearfix:after{
        content:"";
        display:table;
        clear:both;
    }

练习,遍历每一个li
通过js特效让每一个li颜色自动渐变

<script>
    window.onload = function () {
        var oLiArray = document.getElementsByTagName("li")   // 数组
        for(var i=0;i<oLiArray.length;i++){
            var oLi = oLiArray[i]
            bgcolor = "rgb("+i+","+(i+1)*50+","+(i+2)*50;
            oLi.style.backgroundColor=bgcolor

        }
    }
    
</script>



<style>
    div ul li{
        width: 200px;
        height: 160px;
        /*background: rgb(50,100,150);*/
        list-style: none;
        float:left;
    }


    div ul{
        background: yellow;
        margin:0;
        padding:0;
        width:1000px;
        /*overflow:auto;*/

    }

    .clearfix:after{
        content:"";
        display:table;
        clear:both;
    }



</style>

<div>
    <ul class="clearfix">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
    </ul>
</div>

效果
javascript-定时器的使用_类名_02

代码,轮播图效果
鼠标进入会停
鼠标离开会继续走
待解决
点击按钮修改移动方向

<script>
    window.onload = function () {
        var oUl = document.getElementsByClassName("ulbox")[0];
        var now_pos = 0;
        var speed = -10;
        function move() {
            now_pos += speed;
            oUl.style.left = now_pos;
            if(now_pos<-1000){
                now_pos = 0;
            }
        }
        t = setInterval(move, 100);

        oUl.onmouseover = function () {
            clearInterval(t)
        }

        oUl.onmouseout = function () {
            t = setInterval(move, 100);
        }
    }
    
</script>

<style>
    div ul li{
        width: 200px;
        height: 160px;
        /*background: rgb(50,100,150);*/
        list-style: none;
        float:left;
    }

    .outter{
        width:1000px;
        height: 160px;
        border:1px solid black;
        overflow: hidden;
        /*overflow:hidden;*/
    }

    div .ulbox{
        /*background: yellow;*/
        width:2000px;
        margin:0;
        padding:0;
        position: relative;
        left:0;
    }

    .clearfix:after{
        content:"";
        display:table;
        clear:both;
    }

    .red{
        background: red;
    }

    .yellow{
        background: yellow;
    }

    .green{
        background: green;
    }

    .blue{
        background: blue;
    }

    .pink{
        background: pink;
    }

</style>

    <div class="outter">
        <ul class="clearfix ulbox">
            <li class="red">1</li>
            <li class="yellow">2</li>
            <li class="green">3</li>
            <li class="blue">4</li>
            <li class="pink">5</li>
            <li class="red">1</li>
            <li class="yellow">2</li>
            <li class="green">3</li>
            <li class="blue">4</li>
            <li class="pink">5</li>
        </ul>
    </div>

<input type="button" value="<---" id="btnleft">
<input type="button" value="--->" id="btnright">

效果
javascript-定时器的使用_定时执行_03
待完成–有按钮特效的

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf