为了账号安全,请及时绑定邮箱和手机立即绑定

JS动画效果

vivian Web前端工程师
难度初级
时长 2小时 8分
学习人数
综合评分9.60
537人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.4 逻辑清晰
  • 运动框架的实现思路

    1,速度(left,right,width,height,opacity)

    2 ,缓冲运动

    3,,多物体运动

    4,任意值变化

    5,链式运动

    6,同时运动

    查看全部
  • ss

    <!DOCTYPE html>
    
    <html>
    
        <head>
    
            <meta charset="UTF-8">
    
            <title>多物体运动</title>
    
            <style type="text/css">
    
                *{
    
                    padding:0;
    
                    margin:0;
    
                }
    
                ul,li{
    
                    list-style: none;
    
                }
    
                ul li{
    
                    width:200px;
    
                    height:100px;
                    line-height: 100px;
    
                    background-color: chartreuse;
    
                    margin-bottom:20px;
                    opacity: 0.3;
                    border: 2px solid #000;
                    font-size: 18px;
                    color: #000;
    
                }
    
            </style>
            <script type="text/javascript">
                window.onload=function(){
                    var aLi=document.getElementsByTagName('li');
    
                    for(var i=0;i<aLi.length;i++){
                        aLi[i].timer=null;
                        //width运动与opacity运动分开设定定时器
                        aLi[i].timerOpacity=null;
                        aLi[i].alpha=30;
                        aLi[i].onmouseover=function(){
                            startMove(this,400,100);
                        }
                        aLi[i].onmouseout=function(){
                            startMove(this,100,20);
                        }
                    }
                    
                    // var timer=null;
                    //设置共用定时器会导致多个目标争抢同一个定时器,导致每一个之前触发的物体运动无法结束,多物体运动不能设置共用变量,所以需要为每个li设置单独定时器
                    function startMove(obj,iTarget,iOpacity){
                        clearInterval(obj.timer);
                        clearInterval(obj.timerOpacity);
                        obj.timer=setInterval(function(){
                            //这里不使用offsetWidth是因为它包含了边框等宽度,无法使元素本身的width达到目标值
                            var speed=(iTarget-parseInt(getStyle(obj,'width')))/8;
                            speed=speed>0?Math.ceil(speed):Math.floor(speed);
                            if(parseInt(getStyle(obj,'width'))==iTarget){
                                clearInterval(obj.timer);
                            }else{
                                //parseInt()取整数数字,去掉属性单位
                                obj.style.width=parseInt(getStyle(obj,'width'))+speed+'px';
                                obj.style.fontSize=parseInt(getStyle(obj,'fontSize'))+speed/10+'px';
                            }
                        },30)
    
                        function getStyle(obj,attr){
                            if(obj.currentStyle){
                                //针对IE获取元素某项css属性
                                return obj.currentStyle[attr];
                            }else{
                                //针对其他浏览器
                                return getComputedStyle(obj,false)[attr];
                            }
                        }
    
                        obj.timerOpacity=setInterval(function(){
                            // var oSpeed=(iOpacity-obj.style.opacity)/10;
                            //变速的值使得无法达成obj.alpha==iOpacity(小数存在),先使用匀速
                            if(obj.alpha>iOpacity){
                                oSpeed=-10;
                            }else{
                                oSpeed=10;
                            }
                            if(obj.alpha==iOpacity){
                                clearInterval(obj.timerOpacity);
                            }else{
                                obj.alpha+=oSpeed;
                                obj.style.opacity=obj.alpha/100;
                            }
                        },30)
                    }
                }
            </script>
    
        </head>
    
        <body>
    
            <ul>
    
                <li>ABC</li>
    
                <li>EFG</li>
    
                <li>123</li>
    
            </ul>
    
        </body>
    
    </html>


    查看全部
    1 采集 收起 来源:获取样式

    2018-06-08

  • //Start运动框架
        //json语句
        //    var json = {a:2,b:7,c:0};
        //    for(var i in json){
        //        //alert(i);    //依次弹出变量a,b,c
        //        alert(json[i]);  //依次弹出变量的值2,7,0
        //        }
       //startMove(obj,{attr1:itarget1,attr2:itarget2},fn)    //attr表属性,iTarget表目标值,多个属性目标值组成json数组
      function startMove(e,json,fn){    //e表对象,json表{attr1:itarget1,attr2:itarget2,···},fn表回调函数
          clearInterval(e.timer);        //清除定时器,e.timer表示给每个对象定义一个定时器,避免共用一个定时器
          e.timer = setInterval(function(){
               for(var attr in json){   //定义attr为json中的变量,即属性,遍历所有属性。避免一个属性变化完后,其他属性也停止变化
                   var flag = true;     //假设所有属性都已经满足icur == json[attr]时,flag为true
                 //取当前的值
                  var icur=0;
                  if(attr == 'opacity'){
                      icur=Math.round(parseFloat(getStyle(e,attr))*100); 
                      }
                  else{
                      icur=parseInt(getStyle(e,attr));              
                      }
                  //算速度
                  var speed=(json[attr]-icur)/5;    
                  speed=speed>0?Math.ceil(speed):Math.floor(speed);
                  //检测停止
                  if(icur != json[attr]){   //json[attr]表示iTarget,即如果当前存在属性值不等于目标值,flag值为false
                      flag=false;    
                      }
                  if(attr == 'opacity'){
                      e.style.opacity=(icur+speed)/100;
                      e.style.filter="alpha(opacity:"+icur+speed+")";
                      }
                  else{
                      e.style[attr]=icur+speed+"px";
                      }
                } 
              if(flag){     //flag为true,即所有当前属性值等于目标值时时,执行下面的方法
                  clearInterval(e.timer3);
                  if(fn){
                      fn();
                      }
                }
          },50)
          }
          //获取样式,兼容处理
      function getStyle(obj,attr){
          if(obj.currentStyle){
              return obj.currentStyle[attr];   //IE
              }
          else{
              return getComputedStyle(obj,false)[attr];   //FireFox及谷歌
              }
          }
    //End运动框架
    查看全部
  • function startMove(obj,json,fn){

                     var flag =true;  //设定所有假设都成立

             clearInterval(obj.timer);

                obj.timer =setInterval(function(){

               

                    for(attr in json){

                    var icur =0;

                if(attr =='opacity'){

                var icur =parseFloat(getStyle(obj,attr)*100);

                }else{

                var icur =parseInt(getStyle(obj,attr));

                }

                var speed =(json[attr] - icur)/8;

                speed =speed>0? Math.ceil(speed) : Math.floor(speed);

                if(json[attr] != icur){

                flag = false;

                   }     // 如果遍历所有只要有不等于的假设不成立,继续执行该进行的操作。 

               

                if(attr == 'opacity'){

                obj.style.filter = "alpha(opacity:"+(icur +speed)+")";

                obj.style.opacity= (icur+speed)/100;

                }else{

                obj.style[attr] = icur +speed+'px';

                }

            

                    if(flag){

                            clearInterval(obj.timer);

                             if(fn){

                            fn();

                      }

                             }

               

             }

                },30)

                  

    }

    function getStyle(obj,attr){

    if(obj.currentStyle){

    return obj.currentStyle[attr];

    }  //基于IE

    else{

    return getComputedStyle(obj,false)[attr];

    }

    }


    查看全部
    1. 定时器

    2. onmouseover 鼠标移入

    3. onmouseout鼠标移除

    4. odiv.offsetLeft  odiv的当前left值

    5. 在两个代码很相似的情况下,可以把不同的地方挑出来作为参数传进去(如鼠标移入与鼠标移除的函数)

    查看全部
    1 采集 收起 来源:JS速度动画

    2018-04-12

  • <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>改变透明度</title>

    <style type="text/css">

    #div1{

    width:160px;

    height:160px;

    background-color:red;

    filter: alpha(opacity:30);

    opacity:0.3;

    }

    </style>

    <script type="text/javascript">

    window.onload = function(){

    var oDiv = document.getElementById("div1");

    oDiv.onmouseover = function(){

    startMove(100);

    }

    oDiv.onmouseout = function(){

    startMove(30);

    }

    var timer = null;

    var alpha = 30;

    function startMove(target){

    var oDiv = document.getElementById("div1");

    clearInterval(timer);

    timer = setInterval(function(){

    var speed = 0;

    if(alpha > target){

    speed = -10;

    }else{

    speed = 10;

    }

    if(alpha == target){

    claerInterval(timer);

    }else{

    alpha+=speed;

    oDiv.style.filter = 'alpha(opacity:'+alpha+')';

    oDiv.style.opacity = alpha/100;

    }

    },30);

    }

    }

    </script>

    </head>

    <body>

    <div id=div1></div>

    </body>

    </html>


    查看全部
    1 采集 收起 来源:JS透明度动画

    2018-04-10

  • <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>多物体改变透明度</title>

    <style type="text/css">

    div{

    width:160px;

    height:160px;

    background-color:red;

    float:left;

    margin:10px;

    filter: alpha(opacity:30);

    opacity:0.3;

    }

    </style>

    <script type="text/javascript">

    window.onload = function(){

    var oDiv = document.getElementsByTagName("div");

    for(var i=0;i<oDiv.length;i++){

    oDiv[i].alpha = null;

    oDiv[i].onmouseover = function(){

    startMove(this,100);

    }

    oDiv[i].onmouseout = function(){

    startMove(this,30);

    }

    }

    // var timer = null;

    // var alpha = 30;

    function startMove(obj,target){

    // var oDiv = document.getElementById("div");

    clearInterval(obj.timer);

    obj.timer = setInterval(function(){

    var speed = 0;

    if(obj.alpha > target){

    speed = -10;

    }else{

    speed = 10;

    }

    if(obj.alpha == target){

    claerInterval(obj.timer);

    }else{

    obj.alpha+=speed;

    obj.style.filter = 'alpha(opacity:'+obj.alpha+')';

    obj.style.opacity = obj.alpha/100;

    }

    },30);

    }

    }

    </script>

    </head>

    <body>

    <div id=div1></div>

    <div id=div2></div>

    <div id=div3></div>

    <div id=div4></div>

    </body>

    </html>


    查看全部
    1 采集 收起 来源:JS多物体动画

    2018-04-10

  • <!DOCTYPE html>

    <html>

    <head>

    <meta charset="UTF-8">

    <title>多物体运动</title>

    <style type="text/css">

    *{

    padding:0;

    margin:0;

    }

    ul,li{

    list-style: none;

    }

    ul li{

    width:200px;

    height:100px;

    background-color: chartreuse;

    margin-bottom:20px;

    }

    </style>

    <script type="text/javascript">

    window.onload = function(){

    var oDiv = document.getElementsByTagName('li');

    for(var i = 0;i < oDiv.length;i++){

    oDiv[i].timer = null;//在对象上定义一个单独的属性值

    oDiv[i].onmouseover = function(){

    startMove(this,400);//this来指定所选择的当前元素

    }

    oDiv[i].onmouseout = function(){

    startMove(this,200);

    }

    }

    //var timer = null;

    function startMove(obj,target){

    clearInterval(obj.timer);

    obj.timer = setInterval(function(){

    var speed = (target - obj.offsetWidth)/8;

    speed = speed >0?Math.ceil(speed):Math.floor(speed);

    if(obj.offsetWidth == target){

    clearInterval(obj.timer);

    }else{

    obj.style.width = obj.offsetWidth+speed+'px';

    }

    },30);

    }

    }

    </script>

    </head>

    <body>

    <ul>

    <li></li>

    <li></li>

    <li></li>

    </ul>

    </body>

    </html>


    查看全部
    1 采集 收起 来源:JS多物体动画

    2018-04-10

  • getStyle()

    查看全部
    1 采集 收起 来源:获取样式

    2018-04-09

  • https://img1.sycdn.imooc.com//5ac355b700013d3c06710306.jpg

    查看全部
    1 采集 收起 来源:获取样式

    2018-04-03

  • 1、dom.style.xxx 这种写法只能获取行内样式 例如 <div ></div> div.style.width能获取到是200px,但是没有出现在 引号中的样式是获取不到的 2、万能方法。 getComputedStyle(div,null).xxx 这个是标准方法,需要做一下兼容 currentStyle 是IE的 3、友情赠送获取任何样式的代码 function getStyle(obj,style){//引用时style要带引号 if(obj.currentStyle){ return obj.currentStyle[style]; }else{ return getComputedStyle(obj,null)[style]; } }

    设置width的style写在div里和写在文档开头的<style></style>里,获取的div元素的oDiv.style.width不一样(后者会把border padding等的宽度也加上)

    parseInt()是获取整数

    查看全部
    1 采集 收起 来源:获取样式

    2018-03-23

  • parseInt(string, radix) parseInt() 函数可解析一个字符串,并返回一个整数。 当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。 当忽略参数 radix , JavaScript 默认数字的基数如下: 如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
    查看全部
  • 存在多项共用一个值,并且这个值会发生改变时,最好单独给赋值,避免出现争用的情况。 li[i].timer = null; li[i].alpha = 30; clearInterval(obj.timer); obj.style.opacity = obj.alpha;
    查看全部
    1 采集 收起 来源:JS多物体动画

    2015-04-12

  • <script> window.onload = function(){ var oDiv = document.getElementById("div1"); oDiv.onmouseover = function(){ startOpacity(100); }; oDiv.onmouseout = function(){ startOpacity(30); }; }; var alpha = 30; var timer = 0; function startOpacity(opac){ var oDiv = document.getElementById("div1"); clearInterval(timer); var speed = 0; timer = setInterval(function(){ if(alpha > opac){ speed = -10; }else if(alpha < opac){ speed = 10; }else{ clearInterval(timer); } alpha+=speed; oDiv.style.filter = alpha+"(opacity:"+alpha+")"; oDiv.style.opacity = alpha / 100; },30); } </script>
    查看全部
    1 采集 收起 来源:JS透明度动画

    2018-03-22

  • 所有主流浏览器(IE,Firefox,Opera,Chrome,Safari)都支持opacity属性。 注意:IE8和早期版本支持另一种过滤器属性。像:filter:Alpha(opacity=50)
    查看全部
    1 采集 收起 来源:JS透明度动画

    2015-04-12

举报

0/150
提交
取消
课程须知
1.您至少已经具备JavaSript的知识。2.您已经具备一些开发经验。
老师告诉你能学到什么?
1.使用定时器实现简单动画。2.如何一步步封装库。2.培养编程的思想。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!