zoukankan      html  css  js  c++  java
  • 原生JS封装运动框架

    昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架.

    正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装.

    首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子,如下代码:

    #div{
       100px;
      height: 100px;
      background: gold;
      position: absolute;
      left:0;
      top:0;
      opacity: 1;
    }

    然后我们就开始写js代码了,如下:

    window.onload=function() {


      var oDiv = document.getElementById("div");
      var timer;

    写一个函数,方便以后用的时候直接调用就好了,首先先传入几个参(要运动的对象,变动的属性,终点距离,运动总时间,回调函数)----今天的只是简单的封装一下,你也写可以传入一个json
      function move(obj,name, target, dur,fn) {
    // 总步数=总时间÷计时器设定的时间
      var count = parseInt(dur / 30);
    // 起始位置
      var start = parseFloat(setStyle(obj,name));
    // 总距离=传入的距离-起始距离
      var dis = target - start;
    // 每步运动的距离=总距离÷总步数
      var spen = dis / count;
    // 定义起始步数
      var n = 0;
      timer = setInterval(function () {
      n++;
    // 把当前运动的位置保存
      var cur=start + n * spen;
    // 判断属性是不是透明度,透明度不用加单位
      if(name=='opacity'){
        obj.style[name]=cur;
    // 兼容IE低版本,IE的透明度是1到100
        obj.style.filter='alpha('+cur*100+')';
      }else {
        obj.style[name] = start + n * spen + "px";
      }
    // 判断运动是否完成
      if (n == count) {
    // 完成后清除定时器,停止运动
        clearInterval(timer);
    // 判断用户是否传入回调函数
        fn && fn();
      };
     }, 30);
    };

    然后自己随便写一些调用回调函数,测试一下:
      oDiv.onclick=function(){
        move(oDiv,"left",600,1000,function(){
          move(oDiv,'top',400,1000,function(){
            move(oDiv,"width",300,1000,function(){
              move(oDiv,"opacity",0,1000);
            });
          });
        });
      };
    // 获取非行间样式
      function setStyle(obj,name){
    // 考虑兼容性问题
        if(obj.currentStyle){//不兼容火狐和谷歌
          return obj.currentStyle[name];
        }else{
          return getComputedStyle(obj,false)[name];//不兼容IE
        };
      };
    };

    好了,今天就先封装到这里了,这只是简单的封装一下,明天我们会改进一下,比如参数太多、参数顺序不能乱的问题,还有多次点击计时器出现的Bug的问题,如果你有好的方法欢迎评论区留言,程序员之间就是要相互学习的,明天见,老铁们!

  • 相关阅读:
    禁用LinkButton的方法
    Windows Server2008R2中导入Excel
    Viewport
    Firefox模拟手机访问手机网站
    关闭ReSharper中的[ Use 'var' ]提示(Disable C# “var” Recommendation in ReSharper)
    浏览器中如何获取想要的offsetwidth、、、clientwidth、、offsetheight、、、clientheight。。。
    JS中关于clientWidth offsetWidth scrollWidth 等的含义的详细介绍
    base64编码解码js
    scrollTop如何实现click后页面过渡滚动到顶部
    如何快速获取当前链接?后面的内容,location.search、页面滚动
  • 原文地址:https://www.cnblogs.com/May-J-Wang/p/7003848.html
Copyright © 2011-2022 走看看