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

JS动画效果

vivian Web前端工程师
难度初级
时长 2小时 8分
学习人数
综合评分9.60
537人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.4 逻辑清晰
  • var timer = null;        function startMove(iTarget) {            clearInterval(timer);            timer = setInterval(function(){                var speed = 0;                var oDiv = document.getElementById("oDiv");                speed = (iTarget-oDiv.offsetLeft)/10;                speed = speed>0?Math.ceil(speed):Math.floor(speed);                if (oDiv.offsetLeft!=iTarget){                    oDiv.style.left = oDiv.offsetLeft + speed +"px";                }            },30)        }        window.onload = function() {            var oDiv = document.getElementById("oDiv");            oDiv.onmouseover = function() {                startMove(0);            }            oDiv.onmouseout = function () {                startMove(-200);            }        }


    iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);//速度如果没有取整,会导致无法到达目标,一则占用资源

    查看全部
    0 采集 收起 来源:JS缓冲动画

    2018-03-23

  • offsetLeft:当前值

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

    2018-03-23

  • 运动框架实现思路
    查看全部
  • //做了验证,在动画完执行后,定时器确实没有被清除,flag没起作用 function getStyle(obj,attr) { if (obj.currentStyle) { return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } var alpha = 30; function startMove(objj,json,fn) { var flag = true; clearInterval(objj.timer); objj.timer = setInterval(function () { var icur = 0; for(var attr in json){ if(attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(objj,attr))*100); }else{ icur = parseInt(getStyle(objj,attr)); } var speed = (json[attr] - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(icur != json[attr]){ flag = false; } if (attr == 'opacity') { objj.style.filter = 'alpha(opacity:'+icur+speed+')'; objj.style.opacity = (icur+speed)/100; } else { objj.style[attr] = icur+speed+'px'; } if (flag) { console.log('未输出任何内容,证明动画执行完后未清除定时器'); clearInterval(objj.timer); if(fn){ fn(); } } } },30); }
    查看全部
  • //注释所有flag代码,动画仍然正确执行,不知道此时定时器是否清除 function getStyle(obj,attr) { if (obj.currentStyle) { return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } var alpha = 30; function startMove(objj,json,fn) { //var flag = true; clearInterval(objj.timer); objj.timer = setInterval(function () { var icur = 0; for(var attr in json){ if(attr == 'opacity'){ icur = Math.round(parseFloat(getStyle(objj,attr))*100); }else{ icur = parseInt(getStyle(objj,attr)); } var speed = (json[attr] - icur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); // if(icur != json[attr]){ // flag = false; // } if (attr == 'opacity') { objj.style.filter = 'alpha(opacity:'+icur+speed+')'; objj.style.opacity = (icur+speed)/100; } else { objj.style[attr] = icur+speed+'px'; } // if (flag) { // clearInterval(objj.timer); // if(fn){ // fn(); // } // } } },30); }
    查看全部
  • 获取样式 function getStyle(obj, attr) { if (obj.currentStyle) { return obj.currentStyle[attr];//IE浏览器 } else { return getComputedStyle(obj, false)[attr];//firefox浏览器 } }
    查看全部
    0 采集 收起 来源:获取样式

    2018-03-06

  • speed=speed>0?Math.ceil(speed):Math.floor(speed);
    查看全部
    0 采集 收起 来源:JS缓冲动画

    2018-03-22

  • filter: alpha(opacity:30); /*IE浏览器专用,opacity属性值为0~100*/ opacity:0.3; /*所有主流浏览器都支持opacity属性。
    查看全部
    0 采集 收起 来源:JS透明度动画

    2018-03-06

  • <!-- 使用js实现透明度运动而不采用直接设置css的style.opacity属性来改变透明度,这是因为css的透明度的设置是一步到位,瞬时完成的,而使用js可以实现渐隐特效 --> opacity是不透明度,opacity为0时表示不透明度是0也就是完全透明(效果等同于css的隐藏) filter: alpha(opacity:30); /*IE浏览器专用,opacity属性值为0~100*/ opacity:0.3; /*所有主流浏览器都支持opacity属性。. 注意:IE8和早期版本支持另一种过滤器属性。像:filter:Alpha(opacity=50),而IE8版本之前的opacity属性值是0~1*/ 【没有直接的属性可以改变透明度,需要定义一个alpha】 var timer = null; var alpha = 30; function startMove(iTarget){ var oDiv = document.getElementById("div1"); clearInterval(timer); timer = setInterval(function(){ var speed = 0; if(alpha > iTarget){ speed = -10; }else{ speed = 10; } if(alpha == iTarget){ clearInterval(timer); }else{ alpha += speed; oDiv.style.filter = "alpha(opactiy:"+alpha+")";(IE) oDiv.style.opactiy = alpha/100;(火狐或chrome,它们的这个系数的满值是100,这里需要的满值是1) } },30) }
    查看全部
    0 采集 收起 来源:JS透明度动画

    2018-03-22

  • 匀速运动:<br> 1、设置定时器,每隔一段时间更改位置,达到匀速运动<br> 2、设置定时器前需清除定时器,以防多次触发重复生成多个定时器<br> 3、当运动位置达到目标值时,可通过清除定时器停止运动<br> 4、当定义函数多处相同时,可封装为一个函数,用不同参数调用,尽量少传递相同的参数<br>
    查看全部
    1 采集 收起 来源:JS速度动画

    2018-03-22

  • 1.速度(改变值left,right,width,height.opacity透明度) 2.缓冲运动 3.多物体运动 4.任意值变化 5.链式运动 6.同时运动
    查看全部
  • JSON 轻量级数量交互
    查看全部
  • 两个startMove函数异步进行,第一个函数相当于通知它去改变宽度,通知完之后,不管完成没完成,都继续执行第二个函数了,而第二个函数里面也有clearInterval();就把前一个未执行完的动画清除了,相当于覆盖了。(改变宽度可能要300ms,而通知可能就要1ms,第二个函数通知的时候也就1ms,很快,就相当于覆盖了) 如果同时调用多个startMove函数,后面的startMove会清除掉前面的startMove的定时器(因为startMove函数中第一句就是clearInterval)。因此实际只有最后一个startMove被执行了
    查看全部
    0 采集 收起 来源:同时运动

    2018-01-19

  • 四舍五入
    查看全部
  • 运动框架实现思路: 1.速度(改变值Left、right、width、height、opacity) 2.缓冲运动 3.多物体运动 4.任意值变化 5.链式运动 (如:先宽后高) 6.同时运动 (如:宽高同时运动)
    查看全部

举报

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

微信扫码,参与3人拼团

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

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