• js运动框架


    最近写个运动框架,确实好用,来附上,具体就不说了,注释比较详细

    简洁版:包括链式运动,没有同时运动,不需要json格式

            //获取非行间样式
            function getStyle(obj,attr){
                 if(obj.currentStyle){
                       return obj.currentStyle[attr]
                 }
                 else{
                       return getComputedStyle(obj,false)[attr]
                 }
            }
    
            //startMove运动函数 fn为链式运动
            function startMove(obj,attr,target,fn){
    
                    clearInterval(obj.timer)
                    obj.timer=setInterval(function(){
                           var getCur=0
                           if(attr=='opacity'){        //兼容透明度
                              getCur=Math.round(parseFloat(getStyle(obj,attr))*100)
                           }
                           else{
                                 getCur=parseInt(getStyle(obj,attr))
                           }
                           var speed=(target-getCur)/8 //缓动运动
                           speed=speed>0?Math.ceil(speed):Math.floor(speed)
                           if(getCur==target){
                                   clearInterval(obj.timer)
                                    if(fn){
                                         fn.call(obj)      //回调函数作用域指向obj
                                    }
                           }else{
                                   if(attr=='opacity'){
                                       obj.style.filter='alpha(opacity:'+(getCur+speed)+')'
                                       obj.style.opacity=(getCur+speed)/100
                                   }else{
                                       obj.style[attr]=getCur+speed+'px'
                                   }
                           }
                    },30)
            }

    完整版:包括链式运动、同时运动,涉及到同时运动则需要利用json辅助完成

            //获取非行间样式
            function getStyle(obj,attr){
                 if(obj.currentStyle){
                      return obj.currentStyle[attr]
                 }
                 else{
                      return getComputedStyle(obj,false)[attr]
                 }
            }
    
            //startMove运动函数 fn为链式运动  json for in 循环
            function startMove(obj,json,fn){
                    clearInterval(obj.timer)
                    obj.timer=setInterval(function(){
                        var flag=true                  //设置一个标签
                        for(var attr in json){
                           var getCur=0
                           if(attr=='opacity'){        //兼容透明度
                              getCur=Math.round(parseFloat(getStyle(obj,attr))*100)
                           }
                           else{
                                 getCur=parseInt(getStyle(obj,attr))
                           }
                           var speed=(json[attr]-getCur)/8 //缓动运动
                            speed=speed>0?Math.ceil(speed):Math.floor(speed)
    
                           if(getCur!=json[attr]){     //判断标签  要的是最后的值
                                   flag=false
                           }
                                if(attr=='opacity'){
                                     obj.style.filter='alpha(opacity:'+(getCur+speed)+')'
                                     obj.style.opacity=(getCur+speed)/100
                                }else{
                                     obj.style[attr]=getCur+speed+'px'
                                }
                      }
                     if(flag){                       //判断标签   设置在for in外面意思是for in到全部的attr才执行接下操作        
                               clearInterval(obj.timer)
                              if(fn){
                                   fn.call(obj)      //回调函数作用域指向obj
                              }
                           }
                    },30)
            }

    需要注意的几点

    获取非行间样式,注意浏览器的兼容问题

    常用的Math方法、parseInt等的转换

    回调函数,作用域的问题

    json格式

  • 相关阅读:
    js获取浏览器和屏幕的各种宽度高度
    闭包
    原型与原型链
    vuex
    微信小程序天使童装答辩
    vue脚手架本地开发跨域请求设置
    mvvm和mvc
    Vue 中 methods,computed, watch 的区别
    keep-alive
    YII2组件之GridView
  • 原文地址:https://www.cnblogs.com/iDouble/p/8446494.html
Copyright © 2020-2023  润新知