JS用setTimeOut延迟执行一段代码?

有时候,我们需要在某一个div的动画执行之后,再执行另一个div的动画。

这个时候可以用到这个代码:

deviceM.style.animation = 'display 0.4S ease-out 0.4S'

ease-out表示动画延迟0.4S执行。

但是,有问题的是,动画只是负责实现一个切换功能,动画并不能更改它归属盒子的属性。

比如说下面的JS代码:

if (flag) {
            closeDevice.src = './images/drop.png'
            deviceCate.style.transition = 'all 1.2S'
            deviceCate.style.height = '61px'
            deviceM.style.animation = 'hide 0.2S'
            deviceM.style.opacity = 0
            return flag = false
        }
        else {
            closeDevice.src = './images/pull.png'
            deviceCate.style.transition = 'all 1.2S'
            deviceCate.style.height = '342px'
            deviceM.style.animation = 'display 0.4S ease-out 0.4S'
            return flag = true
        }

注意看else的功能实现。

我预想的是,在deviceM执行完动画之后,再更改它的opacity值,让它的出现显得不那么突兀。但是这个时候,如果我把这个代码写在执行完动画后的下一行,然后再执行代码,就会出现下面的情况:

deviceCate动画一开始执行的时候,0S的时候就会直接出现deviceM,然后0.4S之后deviceM再执行display动画,再0.4S之后动画执行完毕,显示deviceM。

这个时候,我看到的画面是一闪,然后动画执行,缓慢出现deviceM,然后再一闪。

但,这个过程并不是我想要的结果,我要的执行顺序是下面这个:

deviceCate动画一开始的时候,过了0.4S之后deviceM才执行display动画,但是在0S的时候,deviceM是不显示的,只有在动画开始之后deviceM才会显示。

也就是说,在deviceCate执行之后,再过大概0.8S,系统才继续执行deviceM透明度更改的代码。

我预想看到的效果是:deviceCate动画执行了0.4S之后,系统才执行deviceM的动画,然后再过0.4S之后,系统执行完deviceM的动画。这个时候如果不把deviceM的opacity值改为1,deviceM会消失,然后这个时候(0.8S的时候),我们再修改它的值就可以完美接上上面的动画执行。

一开始的时候,我首先想到了animation-delay,但是很明显,这个是不行的。

这个代码只会执行一次,在第二次执行这个代码时就会失效,所以只能考虑别的代码了。

所以这个时候,只能换一种方式了。

换什么方式好?

我找了很久,都没找到我需要的方式,后来想到我们可以通过setTimeOut的方式来进行延迟执行该代码。

于是就有了下面这段:

setTimeout(function () {
                deviceM.style.opacity = 1
            }, 800)

完美解决问题,在deviceM动画执行之后,再更改了它的透明度,然后延迟执行的时间,跟动画时间保持一致,不会出现突现的情况。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
settimeoutJavaScript中的一个方法,可以用来延迟执行一段代码。在使用setTimeout延迟加载JS时,可以通过设定延迟的时间来控制什么时候执行这段代码延迟加载JS有以下几个优点: 1. 提高网页加载性能:通过将一些不必要的JS代码延迟加载,可以减少网页的加载时间,提高用户的访问速度和体验。 2. 减少页面阻塞:JS代码的加载和执行会阻塞页面的渲染,如果直接将所有的JS代码都放在页面头部加载,会导致用户在页面加载过程中看到空白的页面。通过延迟加载JS,可以让页面在加载的同时渲染出页面内容,提高用户的体验。 3. 对于某些插件和第三方库,可以根据需要进行延迟加载,只在需要的时候加载相应的代码,减少页面的负载。 使用settimeout延迟加载JS的方法如下: 1. 在需要延迟加载的位置,使用setTimeout方法包装一段JS代码,设置延迟的时间。 2. 在延迟时间到达后,setTimeout执行包装的代码。 例如,可以使用如下代码延迟加载一个JS文件: setTimeout(function(){ var script = document.createElement('script'); script.src = 'example.js'; document.head.appendChild(script); }, 2000); 上述代码会在页面加载后延迟2秒钟后加载example.js文件。 需要注意的是,在使用settimeout延迟加载JS时,延迟的时间应该根据实际情况进行调整,避免加载太早或者加载太晚导致的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值