- 60
- 0
js用setInterval()做缓冲运动,第一个缓冲能实现效果,第二个为什么还没到达设定条件就已经停止计时了?
做一个侧边栏的缓冲效果,从左边进入和离开,但是离开的时候感觉没有在及时,LeftBar.style.left直接跳到-300px.
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
<!DOCTYPE html>
<html lang="en" style="overflow-x: hidden">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<style>
html,body{margin: 0;padding: 0;overflow-x: hidden}
.nav-container{width: 100%;height: 90px;background-color: #0abfbf;position: relative}
.nav-container #tab-bar{width: 60px;height: 60px;border: 1px #2b2c31 solid;text-align: center;position: absolute;display:flex;left: 10px;margin-top: 10px}
.nav-container #tab-bar span{width: 80%;height: 4px; background-color: #2b2c31;margin-top: 16px;
display:block;position: absolute;margin-left: 10%;}
.nav-container #tab-bar .tab-bar-1{top: 0} .nav-container #tab-bar .tab-bar-2{top: 9px} .nav-container #tab-bar .tab-bar-3{top: 18px}
.left-bar{width: 300px;border: 1px solid #0c6492;display: block;top: 0;left: -300px;right: auto;position: fixed;overflow-y:auto}
.bar-close{width: 60px;height: 60px;position: relative;right: -220px}
.bar-close .bar-left, .bar-close .bar-right{position: absolute;width: 80%;margin-left: 10%;height: 3px;background: black}
.bar-close .bar-left{transform: rotate(45deg);top: 5px} .bar-close .bar-right{transform: rotate(315deg);top: 5px}
body{left: 0px;display: block;overflow-y: auto;height: 3000px}
</style>
<body>
<nav class="nav-container">
<div id="tab-bar">
<span class="tab-bar-1"></span>
<span class="tab-bar-2"></span>
<span class="tab-bar-3"></span>
</div>
</nav>
<div class="left-bar">
<ul>
<li>首页</li>
<li>Dating Site</li>
<li>Dating Tips</li>
<li>Blogs</li>
<li>Forum</li>
<li>Sign Up</li>
</ul>
<div class="bar-close">
<span class="bar-left"></span>
<span class="bar-right"></span>
</div>
</div>
</body>
<script>
var LeftBar =document.getElementsByClassName('left-bar')[0]
var BoDy = document.body
var TabBar = document.getElementById('tab-bar')
var BarClose = document.getElementsByClassName('bar-close')[0]
TabBar.onclick = function () {
var timer = setInterval(function () {
console.log(LeftBar.offsetLeft)
if(LeftBar.style.left>=0 +"px"){
clearInterval(timer)
LeftBar.style.left = 0 + "px"
}
else {
LeftBar.style.left = (2+LeftBar.offsetLeft)/2 + "px"
BoDy.style.marginLeft = (600+LeftBar.offsetLeft)/2 +"px"
}
},100)
}
BarClose.onclick = function () {
var timer = setInterval(function () {
//console.log(LeftBar.offsetLeft)
if(LeftBar.style.left<=-300 + "px"){
clearInterval(timer)
LeftBar.style.left = -300 + "px"
}
else {
LeftBar.style.left = (-4+LeftBar.offsetLeft)/2 + "px"
BoDy.style.marginLeft =(2+LeftBar.offsetLeft)/2 +"px"
console.log(LeftBar.offsetLeft)
}
},100)
}
</script>
</html>
怎样才能实现侧边栏进入和离开的时候都有缓冲运动呢?
- 共 0 条
- 全部回答
-
莫笑年少江湖梦 普通会员 1楼
在JavaScript中,
setInterval()函数用于设置一个定时器,每次定时器调用时,都会执行一次指定的函数。定时器的运行方式可以是每隔一段时间执行一次函数,也可以是每次执行函数之前检查一个特定的条件,然后在条件满足时立即停止定时器。假设我们有一个函数
handleInterval,它接受一个回调函数作为参数,并在定时器调用时执行这个函数。当第一个setInterval()函数调用handleInterval并设置定时器的时间间隔为1秒时,函数开始执行:javascript setInterval(handleInterval, 1000);在这个例子中,
handleInterval函数将在1秒后执行,因为定时器的时间间隔为1秒。所以,当第一个定时器调用handleInterval时,函数会被立即调用,并开始执行,然后在1秒后返回,这时第二个定时器已经运行,所以它没有等到条件满足就停止计时。但是,当第二个定时器调用
handleInterval并设置定时器的时间间隔为1秒时,由于第一个定时器已经执行了1秒,它已经到达了预定的回调函数的执行时间,而回调函数handleInterval在返回之前,已经检查了第二个定时器的运行条件,当条件满足时立即停止了计时器,所以第二个定时器在没有等到回调函数的执行时间(即1秒)之前就已经停止计时了。如果你希望第二个定时器在满足条件后立即停止计时,你可以修改
handleInterval函数的逻辑,如下所示:javascript function handleInterval() { // 在此处添加检查条件和停止计时的代码 if (condition) { clearInterval(intervalId); } // 在此处添加回调函数的执行代码 handleCallback(); }这样,第二个定时器在满足条件后立即停止计时,而第一个定时器在执行
handleInterval函数后,会立即检查第二个定时器的运行条件,当条件满足时立即停止计时。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
