缓冲运动的封装--简易.js

<!DOCTYPE html>
<html lang="en">
   <head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Document</title>
   <style>

.box1{width:100px;height:100px;background: red;position: absolute;left:0;top:0;}
          .box2{width:100px;height:100px;background: blue;position: absolute;left:0;top:130px;}

.line{width:1px;height:600px;background: black;position: absolute;top:0;left:500px;}

</style>
  </head>
  <body>
        <div class="box1"></div>
        <div class="box2"></div>
        <div class="line"></div>
    </body>
   <script>

var obox1 = document.querySelector(".box1");
         var obox2 = document.querySelector(".box2");

document.onclick = function(){
                move(obox1,{left:600,top:30},function(){
                 move(obox2,{width:400,height:120})
           });
         }

function move(ele,data,end){
             clearInterval(ele.t);
             ele.t = setInterval(() => {
            // 1.计时器开启之后,设定状态为关闭计时器
              var onoff = true;
             for(var i in data){
             var iNow = parseInt(getStyle(ele,i));
             var speed = (data[i] - iNow)/7;
              speed = speed<0 ? Math.floor(speed) : Math.ceil(speed);
// 必须所有属性都到目标才能清计时器
// 每次只能拿到一个属性
// 只能判断一个属性是否到目标
// 如果有一个属性到目标了,一定会清除计时器么?不一定
// 如果有一个属性没到目标,一定不清除计时器!!!

if(data[i] != iNow){
// 3.但是在设定状态之后,关闭计时器之前,判断是否有属性没到目标,只要有一个属性没到目标,就把状态改成不关闭计时器
              onoff = false;
            }
             ele.style[i] = iNow + speed + "px";
            }
// 2.根据状态决定关闭计时器
            if(onoff){
           clearInterval(ele.t);

    end && end();
    }
    }, 30);
  }

    function getStyle(ele,attr){
      if(getComputedStyle){
      return getComputedStyle(ele,false)[attr];
    }else{
      return ele.currentStyle[attr];
    }
  }
  </script>
  </html>

原文地址:https://www.cnblogs.com/wss521/p/12039134.html

时间: 2024-10-09 21:12:46

缓冲运动的封装--简易.js的相关文章

js之运动框架缓冲运动

由于JS里对于数值小数点会自动去除,所以对于运动位置,需要使用Math.ceil()向上取整或者 Math.floor()向下取整进行解决 以下是我的缓冲运动练习简单代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

js缓冲运动代码实例

js缓冲运动代码实例:元素的缓冲运动效果要比匀速运动更为美观一些,因为显得更为有张力和弹性,当然对于浏览者来说可能会有更好的效果,那么留住用户的可能性也就更大,下面就通过代码实例简单介绍一下如何实现此效果.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www

JS实现多物体width缓冲运动实例

多物体运动,运动参数不能公用. 这篇文章主要介绍了JS实现多物体缓冲运动实例代码,有需要的朋友可以参考一下 效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: 代码如下: <head runat="server"> <title></title> <style type="text/css">

js实现缓冲运动,和匀速运动有点不相同

缓冲运动和匀速运动有点不同,看图可以知道缓冲运动速度是越来越慢的. 1 <style> 2 *{ 3 padding:0; 4 margin:10px 0; 5 } 6 #div1{ 7 height:100px; 8 width:100px; 9 background:green; 10 float:left; 11 position:relative; 12 left:1000px; 13 } 14 #div2{ 15 border-left:1px solid black; 16 pos

缓冲运动以及方法的封装

缓冲运动:速度由快到慢的一种运动形式,常见于轮播图:现封装一个小插件,方便实现不同元素,实现不同样式的缓冲变化: 1 //获取非行间样式 2 function getStyle(ele,attr){ 3 return ele.currentStyle ? ele.currentStyle[attr] : getComputedStyle(ele,null)[attr]; 4 } 5 6 function move(ele,json,fn){ //json的接收 {width:10900} 7 /

js运动基础之缓冲运动

单属性缓冲运动 1 /** 2 * 单属性缓冲运动 3 */ 4 function fnSingleBufferMove(oDom, sAttr, iTarget, fn){ 5 var iSpeed, iCur; 6 clearInterval(oDom.timer); 7 oDom.timer = setInterval(function(){ 8 // 计算当前值 9 if(sAttr == 'opacity'){ 10 iCur = Math.round(fnGetStyle(oDom,

JS运动---运动基础(缓冲运动)

(1)手风琴效果 分析: (2)基础缓冲运动 接下来取整 原因: px为计算机识别的最小单位,1px无法再往下拆分.所以css如果取值200.5px,解析时计算机会自动将其改为200px注意:这里的数值并没有四舍五入计算,200.9px最后依然是200px 速度不能是小数,需要取整,所以接下来进行取整 因为从左到右运动和从右到左运动不一样,所以需要判断 (3)右侧悬浮框缓冲运动 <!DOCTYPE HTML> <html> <head> <meta charset

关于javascript缓冲运动的笔记

Js里面有关运动的框架比较多,先从基本开始,我感觉缓冲运动是比教基础而且比较重要的,先提供一个小例子. <script type="text/javascript">        window.onload = function()        {            var oBtn = document.getElementById("btn1");            var oDiv = document.getElementById(&

关于多物体缓冲运动

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>多物体缓冲运动</title></head><style>*{margin:0px;padding:0px;}#move li{width:200px;height:100px;display:block;margin-bottom:20