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的问题,如果你有好的方法欢迎评论区留言,程序员之间就是要相互学习的,明天见,老铁们!

  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/May-J-Wang/p/7003848.html
Copyright © 2011-2022 走看看