JavaScript运动中级
来源:互联网 发布:windows me u盘安装 编辑:程序博客网 时间:2024/06/04 19:19
链式运动框架
回调函数
运动停止时,执行函数
运动停止时,开始下一次运动
例子:土豆网菜单
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style> #div1 { width: 100px; height: 100px; background: green; filter: alpha(opacity:30); opacity: 0.3; } </style> <script src="move.js"></script> <script> window.onload = function () { var oDiv = document.getElementById('div1'); oDiv.onmouseover = function () { startMove(oDiv, 'width', 300, 10, function () { startMove(oDiv, 'height', 300, 10, function () { startMove(oDiv, 'opacity', 100, 10, function () { }); }); }); }; oDiv.onmouseout = function () { startMove(oDiv, 'opacity', 30, 10, function () { startMove(oDiv, 'height', 100, 10, function () { startMove(oDiv, 'width', 100, 10, function () { }); }); }); }; }; </script></head><body> <div id="div1"></div></body></html>
function getStyle (obj, name){ if (obj.currentStyle) { return obj.currentStyle[name]; } else { 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)/6; 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; document.getElementById('txt1').value = obj.style.opacity; } else { obj.style[attr] = cur + speed + 'px'; } } }, 30); }
依次运动,不能同时运动
完美运动框架
多个值同时变化
setStyle同时设置多个属性
参数传递
json的使用
for in遍历属性
运用到运动框架
检测运动停止
标志变量
例子:伸缩同时淡入淡出的菜单
function getStyle(obj, name) {//此方法主要是要来区分是否是行间样式,还是非行间样式 if (obj.currentStyle) {//非行间样式 return obj.currentStyle[name]; } else {//行间样式 return getComputedStyle(obj, false)[name]; }}var time = null;//obj:当前对象 //value:属性 //Json: 样式Json,格式例如为:{width:100,height:100}//num:速度的快慢//fnEnd:触发的函数,事件,等,如:function(){ //事件内容等},可为空function startMove(obj, Json, num, fnEnd) { clearInterval(obj.time);//清除obj的time,obj.time的意义为:为每一个对象赋一个自己的定时器,以免产生冲突。 obj.time = setInterval(function () { var bStop = true;//假设所有的值都到了 for (var attr in Json) { var cur = 0;//定义一个默认的对象属性值 if (attr == 'opacity') {//如果属性等于透明度 cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);//四舍五入数学函数,因为计算机计算有小数会有点误差,用此函数消除这点误差 //当前对象属性value=opacity } else { cur = parseInt(getStyle(obj, attr)); //当前对象属性value } var speed = (Json[attr] - cur) / num; 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.time);//关闭定时器 if (fnEnd) fnEnd();//执行函数 } } }, 30);};
运动框架总结
演变过程
startMove (iTarget) 运动框架
startMove(obj, iTarget) 多物体
startMove(obj, attr, iTarget) 任意值
startMove(obj, attr, iTarget, fn) 链式运动(运动不同时)
startMove(obj, json) 多值运动
startMove(obj, json, fn) 完美运动框架
运动框架应用
幻灯片
新浪微博
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title><style type="text/css"> *{ margin: 0; padding: 0; } #ul1 { width: 400px; height: 400px; border: 1px solid black; margin: 10px auto; } #ul1 li{ border-bottom: 1px #999 dashed; padding: 4px; list-style: none; overflow: hidden; filter:alpha(opacity:0);opacity: 0; }</style><script src="move.js"></script><script type="text/javascript"> window.onload = function (){ var oBtn = document.getElementById('btn'); var oUl = document.getElementById('ul1'); var oTxt = document.getElementById('txt1'); oBtn.onclick = function(){ var oLi = document.createElement('li'); oLi.innerHTML = oTxt.value; oTxt.value = ''; if (oUl.children.length > 0) { oUl.insertBefore(oLi, oUl.children[0]) } else { oUl.appendChild(oLi); } var iHeight = oLi.offsetHeight; oLi.style.height = 0; startMove(oLi, {height: iHeight}, function(){ startMove(oLi, {opacity:100}); }); } }</script></head><body> <textarea id="txt1" rows="4" cols="40"></textarea> <input id="btn" type="button" value="发布" /> <ul id="ul1"> </ul></body></html>
function getStyle (obj, name){ if (obj.currentStyle) { return obj.currentStyle[name]; } else { 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)/6; 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(); }; }; }, 30); }
1 0
- JavaScript运动中级
- JavaScript运动之缓冲运动
- JavaScript 中级篇
- JavaScript事件中级
- JavaScript中级 ---- 本地存储
- javascript各种运动
- javascript解析人体运动
- JavaScript 运动框架
- JavaScript运动框架
- javascript弹性运动
- javascript 运动函数
- javascript-运动框架
- Javascript运动基础
- JavaScript 运动之匀速运动
- javascript运动框架---1
- JavaScript 运动框架
- JavaScript - 完美运动框架
- JavaScript运动知识
- idea日志配置
- Auto create csdn post
- KMP算法next数组详解
- 1033. 旧键盘打字(20)
- Python:在网页中查找字符串的一般方法--in
- JavaScript运动中级
- ROS IDE —— RoboWare Studio
- Android Studio Attach source code
- 如何解决GitHub冲突<一>:GitHubDesktop同步你的分支
- 第四十三讲项目1.2—由键盘到文件
- requirejs使用AMD标准的jquery-ui
- Subsets
- ios开发self和super的区别
- 【笔试练习】腾讯2016笔试题