运动框架

完美运动框架,包括有style和opacity的样式实现

//以下是运动框架的内容

function getStyle(obj, name)
{
    if(obj.currentStyle) //仅IE
    {
        return obj.currentStyle[name];
    }
    else  //兼容FF浏览器
    {
        return getComputedStyle(obj, false)[name];
    }
}

function startMove(obj,json,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function (){
        var bStop = true; //假设:所有值都已经到了

        for(var attr in json){
        var cur=0;

        if(attr==‘opacity‘)
        {
            cur=Math.round(parseFloat(getStyle(obj, attr))*100);
        }
        else
        {
            cur=parseInt(getStyle(obj, attr));
        }

        var speed=(json[attr]-cur)/10;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);

        if(cur!=json[attr]) //如果有没有到达的值
        bStop = false;

            if(attr==‘opacity‘)
            {
                obj.style.filter=‘alpha(opacity:‘+(cur+speed)+‘)‘;
                obj.style.opacity=(cur+speed)/100;
            }
            else
            {
                obj.style[attr]=cur+speed+‘px‘;
            }
        }
            //结束循环后,清除定时器
        if(bStop){
                clearInterval(obj.timer);
                if(fnEnd) fnEnd();
                //alert("a");
        }
    }, 30);
}

完整实现代码如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">

  <title>完美运动框架</title>
  <style>
        #div1{width:200px;height:200px; background:red; filter:alpha(opacity:30);opacity:0.3;}
  </style>
    <script>

  window.onload = function(){
        var oBtn = document.getElementById(‘btn1‘);
        var oDiv = document.getElementById(‘div1‘);

        oBtn.onclick = function(){
            startMove(oDiv,{width: 300,height: 300,opacity:100}
            );
        }
  }
    //以下是运动框架的内容

function getStyle(obj, name)
{
    if(obj.currentStyle) //仅IE
    {
        return obj.currentStyle[name];
    }
    else  //兼容FF浏览器
    {
        return getComputedStyle(obj, false)[name];
    }
}

function startMove(obj,json,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function (){
        var bStop = true; //假设:所有值都已经到了

        for(var attr in json){
        var cur=0;

        if(attr==‘opacity‘)
        {
            cur=Math.round(parseFloat(getStyle(obj, attr))*100);
        }
        else
        {
            cur=parseInt(getStyle(obj, attr));
        }

        var speed=(json[attr]-cur)/10;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);

        if(cur!=json[attr]) //如果有没有到达的值
        bStop = false;

            if(attr==‘opacity‘)
            {
                obj.style.filter=‘alpha(opacity:‘+(cur+speed)+‘)‘;
                obj.style.opacity=(cur+speed)/100;
            }
            else
            {
                obj.style[attr]=cur+speed+‘px‘;
            }
        }
            //结束循环后,清除定时器
        if(bStop){
                clearInterval(obj.timer);
                if(fnEnd) fnEnd();
                //alert("a");
        }
    }, 30);
}
  </script>
 </head>
 <body>

  <input id ="btn1" type="button" value="运动"/>
  <div id="div1"></div>
 </body>
</html>

多物体运动框架js代码:

首先还是做了style兼容处理,接着是startMove函数

//以下是运动框架的内容

function getStyle(obj, name)
{
    if(obj.currentStyle) //仅IE
    {
        return obj.currentStyle[name];
    }
    else  //兼容FF浏览器
    {
        return getComputedStyle(obj, false)[name];
    }
}

function startMove(obj, attr, iTarget,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function (){
        var cur=0;

        if(attr==‘opacity‘)
        {
            cur=Math.round(parseFloat(getStyle(obj, attr))*100);
        }
        else
        {
            cur=parseInt(getStyle(obj, attr));
        }

        var speed=(iTarget-cur)/10;
        speed=speed>0?Math.ceil(speed):Math.floor(speed);

        if(cur==iTarget)
        {
            clearInterval(obj.timer);

            if(fnEnd)fnEnd();
        }
        else
        {
            if(attr==‘opacity‘)
            {
                obj.style.filter=‘alpha(opacity:‘+(cur+speed)+‘)‘;
                obj.style.opacity=(cur+speed)/100;
            }
            else
            {
                obj.style[attr]=cur+speed+‘px‘;
            }
        }
    }, 30);
}

完整代码实现如下:

<!DOCTYPE HTML>
<!--链式运动框架:运动分阶段进行,当运动停止的时候,执行下一个运动-->
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
div{width:100px;height:50px;background:red;filter:alpha(opacity:30);opacity:0.3;margin:10px;}
</style>
<script src="多物体move.js"></script>
<script>
window.onload=function ()
{
    //var oDiv=document.getElementsByTagName(‘div‘);//先获取div元素
    var oDiv = document.getElementsByTagName(‘div‘);
    for(var i=0;i<oDiv.length;i++){
            //var
            oDiv[i].onmouseover=function ()
            {        var that = this;
                    startMove(that,‘width‘,300,function(){//先是宽变300
                    startMove(that,‘height‘,300,function(){//当宽变300的时候,即运动结束时候开启另一个运动,使其高变为300
                    startMove(that,‘opacity‘,100);//使透明度变成100,原来是30

                    });

                });
            };
            oDiv[i].onmouseout=function ()//当鼠标移出的时候,跟移进的时候效果相反即可。
            {
                    var that = this;
                    startMove(that,‘width‘,100,function(){
                    startMove(that,‘height‘,100,function(){
                    startMove(that,‘opacity‘,30);
                    });

                });
            };
    }
};
</script>
</head>
<body>
    <div id="div1"></div>
    <div id="div1"></div>
    <div id="div1"></div>
</body>
</html>
时间: 2024-11-03 21:44:12

运动框架的相关文章

原生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

带无缝滚动的轮播图(含JS运动框架)

今天学习了一下轮播图的写作,想到前一阵学过的无缝滚动得思想,所以就把轮播与滚动结合了一下.不过我的代码的神逻辑我自己都不敢恭维,在没网没参照的情况下,只能硬着头皮往下写,希望跟大家共勉吧. js运动框架的代码如下: 1 //获取样式 2 function getStyle(obj,attr){ 3 if(obj.currentStyle){ 4 return obj.currentStyle[attr]; 5 }else{ 6 return getComputedStyle(obj,false)

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

JavaScript的运动框架学习总结

一.目录 1. 入门案例——实现匀速运动 2. 入门案例——实现缓冲运动 3. 实现任意值的运动框架v.1 4. 改进任意值的运动框架v.2 5. 改进任意值的运动框架v.3 6. 实现链式运动框架 7. 实现完美运动框架 二.内容 1. 入门案例——实现匀速运动 ①. 要求:只要简单的实现传入的对象和运动的最终目标,便能操作该对象的left属性的大小匀速的变化到目标大小. ②. 具体代码: 1 <!DOCTYPE html> 2 <html lang="en">

JS的完美运动框架

function getStyle(obj, name) { if(obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, false)[name]; } } //注意:在多物体运动框架中,所有东西都不能公用 !否则出问题,BUG:将必要的变量加到物体的属性中就行.即:属性与运动对象绑定:速度.其他属性值(如透明度等等) function startMove(obj, jso

多用途运动框架

该运动框架可以用于改变宽度.高度.字体大小.透明度.Left.top等值 先上一个获取真正样式的函数 //定义getStyle函数,获取真正样式 function getStyle(obj,attr){ if(obj.currentStyle){//兼容IE return obj.currentStyle[attr]; }else if(window.getComputedStyle(obj,false)){//兼容FF return getComputedStyle(obj,false)[at

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

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

js运动框架之掉落的扑克牌(重心、弹起效果)

玩过电脑自带纸牌游戏的同志们应该都知道,游戏过关后扑克牌会依次从上空掉落,落下后又弹起,直至"滚出"屏幕. 效果如图:    这个案例的具体效果就是:点击开始运动,纸牌会从右上角掉落下来,之后弹起,运动的速度会逐渐减慢,直到越出屏幕后,全部纸牌消失,在右上角会重新出现一张纸牌,继续动作,一再往复. 具体代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta ch

js运动框架完成块的宽高透明度及颜色的渐变

了解了运动框架完成块元素的宽高和透明度的变化的原理,我想着写一个颜色的变化来练习一下,不想写了很长时间才写出来,跟各位分享一下. 颜色的变化是通过三元素渐变的方式完成的,通过构造json,使当前的颜色与目标颜色进行对比,实现渐变的过程. 代码如下: 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>