美文网首页
用定时器来控制不同DOM对象相同属性变化

用定时器来控制不同DOM对象相同属性变化

作者: 千锋小书童 | 来源:发表于2020-03-03 00:37 被阅读0次

上一次写了一个用定时器来实现一个进度条,今天再来写一个用定时器来控制多个DOM元素的宽度变化。

创建DOM元素


<body>
    <div></div>
    <div></div>
    <div></div>
    <div></div>/*创建多个DOM元素,这里以4个为例*/
</body>

对DOM元素进行修饰

<style type="text/css">
    div{
        width: 100px;
        height: 40px;
        background: red;
        margin: 10px 0;
        }/*四个(多个)初始宽度为100像素(为方便观察,也可以设置为0),高度为40像素,背景颜色为红色的对象*/
</style>

开始控制DOM元素宽度的变化

<script type="text/javascript">
    //我们设定宽度的目标值为300
    let aDivs = document.querySelectorAll("div");//获取所有的div元素
    let iTarget1 = 300;//设定目标宽度值为300
    let iTarget2 = 100;//初始值为100
    
    for(let i = 0; i < aDivs.length; i++){//for循环遍历获取到的所有div元素
        aDivs[i].onmouseover = function(){//当鼠标移入时触发该函数
            clearInterval(aDivs[i].timer);//清除掉上一个定时器,如果有的话。
            
            aDivs[i].timer = setInterval(function(){//设置定时器
                let iCur = parseInt(getStyle(aDivs[i],"width"));//获取当前DOM节点的宽度
                let iSpeed = Math.ceil((iTarget1-iCur)/8);//目标值与当前值的插值除以八,宽度每一次变化的值
                aDivs[i].style.width = iCur + iSpeed + "px";//目标宽度每一次变化之后的宽度值等于变化前的值与宽度变化值之和。
                if(iCur==iTarget1){//当DOM元素宽度等于目标值时
                    clearInterval(aDivs[i].timer);//清楚定时器
                }
            },20);//每20毫秒运行一次定时器,也就是DOM元素的宽度值发生一次变化
        }
        aDivs[i].onmouseout = function(){//鼠标移出时触发该函数
            clearInterval(aDivs[i].timer);//清除上一个定时器,如果有的话。
            aDivs[i].timer = setInterval(function(){//设置定时器
                let iCur = parseInt(getStyle(aDivs[i],"width"));//获取当前DOM元素的宽度
                let iSpeed = Math.floor((iTarget2-iCur)/8);//目标值与当前值的插值除以八,宽度每一次变化的值(注意与上一个定时器上目标值和当前值的不同。)
                aDivs[i].style.width = iCur + iSpeed + "px";//当DOM元素宽度等于目标值时
                if(iCur == iTarget2){//当DOM元素宽度等于目标值时(恢复到初始状态时)
                    clearInterval(aDivs[i].timer);//清除定时器
                }
            },20);//每二十毫秒运行一次这个定时器
            
        }
    }
    function getStyle(domobj,attr){//获取DOM元素属性值的函数
        if(window.getComputedStyle){//可以获取到内联样式、嵌入样式和外部样式
            return getComputedStyle(domobj,null)[attr];//返回domobj元素的attr属性值
        }
        return domobj.currentStyle[attr];函数返回目标元素的attr属性值
    }
</script>

这样我们就实现了在一个页面中,通过鼠标移入、移出来改变节点的宽度。

相关文章

  • 用定时器来控制不同DOM对象相同属性变化

    上一次写了一个用定时器来实现一个进度条,今天再来写一个用定时器来控制多个DOM元素的宽度变化。 创建DOM元素 对...

  • Virtual DOM 算法——虚拟DOM

    虚拟DOM:将真实DOM树上的结构、属性信息等用JavaScript 对象的形式来表示栗子:HTML写法: 对应J...

  • 属性操作

    非表单元素的属性 1、利用DOM中的元素访问属性,一般DOM对象属性的名称和html中的属性名称相同,但是有些个别...

  • js初识第五节

    通过js来操作dom节点的属性 定时器setTimeout的使用和清除 定时器的异步特性 window的locat...

  • JavaScript ----- 操作DOM对象的属性

    操作DOM对象的属性的方法有四种如下: DOM对象.属性名称 = 新值; DOM对象["属性名称"] = 新值; ...

  • 打印页面要自定义分页

    首先,在Dom对象中pageBreakBefore和page-break-after属性,这两个属性是用来控制文件...

  • 手写一个虚拟DOM库,彻底理解diff算法

    创建虚拟DOM对象 虚拟DOM(下文称VNode)就是使用js的普通对象来描述DOM的类型、属性、子元素等信息,一...

  • jQuery对象和DOM对象的区别

    jQuery对象和DOM对象的区别 1.它们的不同 DOM对象就是我们用JavaScript获得的对象,jQuer...

  • Dom

    学习dom(文档对象模型)就是window对象,里面的document对象提供的属性有哪些,怎么用. Window...

  • 2016-11-25

    HTML DOM maxLength 属性 HTML DOM Text 对象 定义和用法maxLength 属性可...

网友评论

      本文标题:用定时器来控制不同DOM对象相同属性变化

      本文链接:https://www.haomeiwen.com/subject/clynkhtx.html