首页 > web前端 > js教程 > 正文

js动画学习(四)

黄舟
发布: 2016-12-30 16:57:57
原创
1440人浏览过

七、多属性封装函数 



前面分别介绍了单独改变单一属性值得动画,从本节起开始介绍多属性封装函数,一个函数搞定多种属性值的改变。

首先介绍一个很重要的函数getstyle(),这个函数返回一个元素的当前属性值。两个形参分别是元素和属性。注意浏览器的兼容性问题。

//获得元素样式专用封装函数,返回该属性的当前值
 function getStyle(obj,attr) {
     if (obj.currentStyle) {//IE浏览器
         return obj.currentStyle[attr];
     } else {
         return getComputedStyle(obj,false)[attr];//火狐浏览器
     }
 }
登录后复制

接下来重点来了,一个函数实现改变多种属性的动画:

//多物体改变样式(宽,高,字体大小,边框等,透明度需单独分析)速度缓冲封装函数
function startMove(obj,attr,target) {//元素,改变的样式属性,达到的目标值
    clearInterval(obj.timer);//首先清除定时器
    obj.timer=setInterval(function(){
        //1.取当前值
        var icur=0;//icur返回物体样式属性值的大小
        if (attr=='opacity') {//如果属性是透明度,透明度的返回值是零点几的小数
            icur=Math.round(parseFloat(getStyle(obj,attr))*100);//round函数避免透明度值在小数之间来回跳动
        } else {
            icur=parseInt(getStyle(obj,attr));
        }
        //2.算速度
        var speed=(target-icur)/8;//分母为比例系数K,可调
        speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度要取整,不然移动不到终点就停止
        //3.检测运动是否停止
        if (icur==target) {
            clearInterval(obj.timer);
        } else {
            if (attr=='opacity') {
                obj.style.filter='alpha(opacity:'+(icur+speed)+')';//IE浏览器
                obj.style.opacity=(icur+speed)/100;//火狐浏览器
            } else {
                obj.style[attr]=icur+speed+'px';
            }
        }
    },30)
}
登录后复制

我们通过两个div来验证一下:

<style type="text/css">
     #div1,#div2{
         width: 200px;
         height: 200px;
         background: red;
         border: 1px solid black;
         margin-bottom: 10px;
     }
 </style>
登录后复制
<div id="div1"></div>
 <div id="div2"></div>
 <script type="text/javascript">
 window.onload=function(){
     var ob1=document.getElementById('div1');
     var ob2=document.getElementById('div2');
     ob1.onmouseover=function(){
         startMove(this,'width',400);
     }
     ob1.onmouseout=function(){
         startMove(this,'width',200);
     }
     
     ob2.onmouseover=function(){
         startMove(this,'opacity',31);
     }
     ob2.onmouseout=function(){
         startMove(this,'opacity',100);
     }
     //alert(parseFloat(0.07*100));弹出7.00000000001而不是7    所以上面程序中的parseFloat前加四舍五入Math.round函数
 }
 </script>
登录后复制


这样就实现了通过一个startMove()函数实现改变物体的宽和透明度了。



八、链式运动



上面讲的都是一个事件激发一个运动,本节介绍一个div的宽、高、透明度的链式运动。在上面的startMove函数基础上加一个形参fn,作为回调函数;在程序内部的检测运动是否停止部分加一个判断:if(fn) fn();在代码18行:

//多物体改变样式(宽,高,字体大小,边框等,透明度单独分析)速度缓冲封装函数
 function startMove(obj,attr,target,fn) {//元素,改变的样式属性,达到的目标值,回调函数
     clearInterval(obj.timer);
     obj.timer=setInterval(function(){
         //1.取当前值
         var icur=0;//icur返回物体样式属性值的大小
         if (attr=='opacity') {//如果属性是透明度,透明度的返回值是零点几的小数
             icur=Math.round(parseFloat(getStyle(obj,attr))*100);//round函数避免透明度值在小数之间来回跳动
         } else {
             icur=parseInt(getStyle(obj,attr));
         }
         //2.算速度
         var speed=(target-icur)/8;//分母为比例系数K,可调
         speed=speed>0?Math.ceil(speed):Math.floor(speed);//缓冲速度要取整,不然移动不到终点就停止
         //3.检测运动是否停止
         if (icur==target) {
             clearInterval(obj.timer);
             if(fn){//上一个运动停止后判断一下是否还有下一个运动,如果有的话就执行回调函数
                 fn();
             }
         } else {
             if (attr=='opacity') {
                 obj.style.filter='alpha(opacity:'+(icur+speed)+')';//IE浏览器
                 obj.style.opacity=(icur+speed)/100;//火狐浏览器
             } else {
                 obj.style[attr]=icur+speed+'px';
             }
         }
     },30)
 }
登录后复制

下面是个简单的div

Learn在线教育课堂商务企业网站模板
Learn在线教育课堂商务企业网站模板

在线教育 网络课堂 网教 learn 商务 企业 ft5 css3动画 html5 bootstrap 响应式 手机 宽屏 大气 漂亮 培训 学校 教育 文教 官网 全屏 自适应 学习 外贸 法律 服务 背景

Learn在线教育课堂商务企业网站模板 59
查看详情 Learn在线教育课堂商务企业网站模板
<style type="text/css">
     #div1{
         width: 200px;
         height: 200px;
         background: red;
         border: 2px solid black;
         filter: alpha(opacity:30);
         opacity: 0.3;
     }
 </style>
登录后复制

注意看js部分的函数嵌套:

<div id="div1"></div>
 <script type="text/javascript">
 window.onload=function(){
     var ob1=document.getElementById('div1');
     ob1.onmouseover=function(){
         startMove(ob1,'width',400,function(){
             startMove(ob1,'height',400,function(){
                 startMove(ob1,'opacity',100);
             })
         });
     }
     ob1.onmouseout=function(){
         startMove(ob1,'opacity',30,function(){
             startMove(ob1,'height',200,function(){
                 startMove(ob1,'width',200);
             })
         });
     }
 }
登录后复制

鼠标离开的变化顺序与鼠标经过时的相反。

以上就是js动画学习(四)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号