封装好的运动框架

//获取元素属性值的封装
function getStyle(obj,name){
  if(obj.currentStyle){
    return obj.currentStyle[name];
  }else{
    return getComputedStyle(obj,false)[name];
  }
}

//运动框架
function startMove(obj,json,fn){
  clearInterval(obj.timer);
  obj.timer = setInterval(function(){
    var bStop = true;
    for(var attr in json){
    //offsetHeight有一个bug,就是无法准确获取元素宽高,当有body,padding或者margin的时候,就无法正确获取宽高,所以用新的方法来获取宽高。
      var curSty = 0;
      if(attr == ‘opacity‘){
        //Math.round()四舍五入,用来让透明度误差降低
        curSty = Math.round(parseFloat(getStyle(obj,attr))*100);
      }else{
        curSty = parseInt(getStyle(obj,attr));
      }
      var speed = (json[attr]-curSty)/4
      speed = speed>0?Math.ceil(speed):Math.floor(speed);

      if(curSty != json[attr]){
        bStop = false;
      }
      if(attr == ‘opacity‘){
        obj.style.filter = ‘alpha(opacity:‘+(curSty + speed)+‘)‘
        obj.style.opacity = (curSty + speed)/100
      }else{
        obj.style[attr] = curSty + speed + ‘px‘;
      }
   }
   if(bStop){
      clearInterval(obj.timer);
      if(fn)fn();
   }
   },30);
}

HTML:

<input type="button" id="btn" value="同时变化" />
<div id="div1"></div>

CSS:

#div1{width: 100px;height: 100px;background: red;filter: alpha(opacity:30);opacity: 0.3;}

JS:

window.onload = function(){
  var oDiv1 = document.getElementById(‘div1‘);
  var oBtn = document.getElementById(‘btn‘);

  oBtn.onclick = function(){
    startMove(oDiv1,{height:300,opacity:100},function(){
      console.log(oDiv1.offsetHeight);
      startMove(oDiv1,{width:400},function(){
        console.log(oDiv1.offsetWidth)
      });
    });  
  }
}

时间: 2024-10-24 14:47:52

封装好的运动框架的相关文章

使用原生JS实现一个风箱式的demo,并封装了一个运动框架

声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的框架. 1 function getStyle(obj,attr) { 2 if(obj.currentStyle){ 3 return obj.currentStyle[attr];//为了获取IE下的属性值 4 }else{ 5 return window.getComputedStyle(ob

原生JS封装运动框架

昨天我们说了一下原生JS中常用的兼容性写法,今天我们来说一下运动框架. 正常情况下我们要写一个运动的效果会用到tween.js这么一个插件,这个东西不是一般人写出来的,因为里面涉及的运动效果都是经过一堆数学的函数运算出来的,我们平常人是写不出来的,所有我们就自己封装一个运动框架,有什么问题改起来也方便,下面我们就开始封装. 首先,我们先写一个div,设置一些简单的样式,我们就拿这个div举例子,如下代码: #div{ width: 100px; height: 100px; background

封装运动框架单个属性

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>封装运动框架的单个属性</title> <style> div{ width: 100px; height: 100px; font-weight:bold;">pink; position: absolute; left: 10px

JavaScript 基础入门11 - 运动框架的封装

目录 JavaScript 运动原理 运动基础 简单运动的封装 淡入淡出 不同属性的设置 多属性值同时运动 运动回调,链式运动 缓冲运动 加入缓冲的运动框架 JavaScript 运动原理 运动基础 在JavaScript中,如何让一个页面元素动起来? 首先,我们需要了解的是,在JavaScript中如何让一个页面元素动起来. 我们先来实现一个简单的功能,当我们点击按钮之后,让一个元素动起来.并且到达500的边界之后立刻停止下来. <!DOCTYPE html> <html> &l

JS 之完美运动框架

完美运动框架是对原来的任意值运动框架的改善和效率的提升,即利用了json对属性进行封装,从而提高效率: window.onload=function(){ var oDiv=document.getElementsByTagName('div')[0]; oDiv.onmouseover=function(){ move(this,{width:200,height:200}); } } function getStyle(obj,attr){ if (obj.currentStyle) { r

【repost】JavaScript运动框架之速度时间版本

一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之后停止 位移 top,left 折叠 width,height 淡入淡出 opacity 时间有关系 setInterval setTimeout 用javascript直接获取行间样式很容易,但如果要获取非行间样式那我们只能借助函数了.我这里编写了一个名为getStyle的函数,专门处理取非行间的

完美运动框架(js)

一.前言 学习js运动时,由于在实现多种不同运动效果过程中很多代码是重复的,故将其封装达到代码重用. 二.代码封装重用 function startMove(obj, json, fnEnd){ clearInterval(obj.timer);//若物体之前开有定时器则先关闭 obj.timer = setInterval(function(){ var bStop = true; //假设所有的属性值运动到了目标值 for(var attr in json){//遍历物体传过来的json值

无限循环轮播图之运动框架(原生JS)

封装运动框架 1 function getStyle(obj,name){ 2 if(obj.currentStyle){ 3 return obj.currentStyle[name]; 4 }else{ 5 return getComputedStyle(obj,false)[name]; 6 } 7 } 8 function move(obj,json,options){ 9 var options=options || {}; 10 var duration=options.durati

JS运动框架

本人也是菜鸟一枚,从网上搜索了很久,封装备注了一套运动框架,加强大家对此的理解,希望多多提议. getId:function(elemId){ return document.getElementById(elemId); }, getStyle:function(obj,attr){ return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj, false)[attr]; }, startMove:function(o