DOM高级:运动原理->匀速运动->加减速运动->缓冲运动

运动原理

运动原理:javaScript实现运动的原理,就是通过定时器不断改
变元素的位置,直至达到目标点后停止活动。通常,要让元素动
起来,我们会通过改变元素的left 和top值来改变元素的相对位
置。

方法

1、运动的物体使用绝对定位
2、通过改变定位物体的属性(right/left/top/bottom)值来使
物体移动,如:向右或者向左移动可以使用offsetleft
(offsetright)来控制左右移动

步骤

1、开始运动前清除已有定时器。(因为,连续点击按钮,
物体会运动越来越快,造成运动混乱);
2、开启定时器,计算速度;
3、把运动和停止隔开(if/else),判断停止条件,执行运动

案列 匀速运动

<style>
#box{width="100px";
height="100px";
background="red";
position:absolute}
</style>
<body>
<button onclick="startMove()" id="btn">开始</button>
<div id="box"></div>
</body>
<script>
var btn=document.getElementById("btn");
var box=document.querySolector("div");
let time=null;
function startMove(){
clearInterval(time);
setInterval(function(){
//让盒子一次向右移动5px
box.style.left=box.offsetleft+5+"px";
//做判断,移动到什么位置的时候停止运动
if(box.offsetleft>300){
box.style.left="300px"
//到达目的时清除定时器
clearInterval(time)
}
},50)
}
//函数开头就清除定时器的原因是,第一次点击是+5“px”
//第二次点击就是在+5px的基础上在加5px,易造成运动混乱。
</script>

匀速运动的优化:往返运动

<style>
div{width="200px";height="200px";
position=absolute;background="red"}

</style>
<button onclick="move(300)">向左</button>
<button onclick="move(0)">向右</button>
<div></div>
<script>
let div =document.querySelector("div");
let time=null;
function move(obj){
//同样事件函数的第一步是清除定时器
clearInterval(time)
time=setInterval(function(){
//判断目标位置,div应往左还是右跑
let speed=obj-div.offsetleft>0?5:-5
 div.style.left=div.offsetleft+speed+"px";
 //判断一下到目的地后停止计时器
 if(div.style.left==0||div.style==300){
 clearInterval(time)}
},50)
}


</script>

匀速透明运动

<style>

div{width="200px";height="200px"position="absolute"
opacity=0.3;}
</style>
<body>


<button onmouseover="move(0.1)" onmouseout=
"move(1)"></button>
<div></div>

</body>
<script>
//封装一个获取非行间样式的函数,obj是对象,attr是值
function getstyle(ojb,attr){
if(job.currentStyle){
return job.currentStyle[attr]}
}else{
//针对非IE浏览器
return job.getComputedStyle(obj,false)[attr]
}
let div=document.querySelector("div")
let ys=getstyle(div,"opacity");//值的返回为字符串
let time=nullfunction(target){
time=setInterval(function(){
//设置一个速度(透明度值)
let speed=ys-target<0?0.01:-0.01
//因为获取的非行间样式返回是字符串,所以将转为数字
div.style.opacity=Number(getstyle(div,"opacity"))
+speed
//加个判断,什么时候该停止计时器
if(div.style.opacity==0||div.style.opacity==1){
clearInterval(time)
}
},50)
}

</script>

缓冲运动与封装

原理:let speed=(mubiao-obj.offsetLeft)10;
    speed=speed>0?Math.ceil(speed):Math.floor(speed);
   

过程、步骤

<style>
div{ height: 100px;
     width: 100px;
     background: red;
     position: absolute;
     top: 200px;
     left: 0px;
    }
</style>
    <body>
<button id = >起飞</button>
   <div > </div>
    </body>
    <script>
let div=document.quertSelector("div");
let button=document.quertSelector("button");
let time=null;
function fei(obj,mubiao){
clearInterval(time);
time=setInterval(function(){
et speed=(mubiao-obj.offsetLeft)10;
speed=speed>0?Math.ceil(speed):Math.floor("speed");
obj.style.left=obj.offsteLeft+speed+"px";
},50)
}
button.onclick=function (){
fei(div,300)
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值