这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要介绍了 JS 高级运动, 结合实例形式分析了 javascript 运动框架原理、实现与应用技巧, 需要的朋友可以参考下
本文实例分析了 JS 高级运动。分享给大家供大家参考,具体如下:
一、链式运动框架
1. 他需要一个回调函数,在运动停止时,开始下一次运动(执行函数)
多物体运动框架改为如下:
- function startMove(obj,attr,iTarget,fn){
- ...
- if(iCur==iTarget){
- clearInterval(obj.timer);
- fn();
- }...
- };
然后就可以用它,比如先变宽再变高最后变透明度
- startMove(this, 'width', 300,
- function() {
- startMove(this, 'height', 300,
- function() {
- startMove(this, 'opacity', 100);
- });
- });
二、完美运动框架
1. 原本多物体运动框架的缺陷
比如要让他宽度高度同时变 300,这样写:
- startMove(this,'width',300);
- startMove(this,'height',300);
问题:只有高度变 300 了(因为宽度准备运动时会开一个定时器,这个定时器还没开始运动前,执行高度变化的运动,就把之前的定时器关了)
2.for in
for(i=0;i<=arr.length;i++) 和 for(i in arr) 效果一样
①什么时候用 for 什么时候用 for...in 呢?
数组:两个都可以用 Json:只能用 for...in(因为 Json 下标没有规律,没有 length 可言)
对数组而言 for...in 循环不灵活,因为 for 循环可以从 1 可以从 2 等等任意数字开始,而 for...in 一循环就全部
②for in 小应用
- function setStyle(obj,attr,value){
- obj.style[attr]=value;
- };
- setStyle(oDiv,'width','300px');
- setStyle(oDiv,'height','300px');
- setStyle(oDiv,'background','green');
=====>
- function setStyle(obj, json) {
- var attr = '';
- for (attr in json) {
- obj.style[attr] = json[attr];
- }
- };
- setStyle(oDiv, {
- width: '300px',
- height: '300px',
- background: 'green'
- });
③多物体运动框架改进
- function startMove(obj,json,fn){
- clearInterval(obj.timer);
- obj.timer=setInterval(function(){
- for(var attr in json){
- if(attr=='opacity'){
- var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
- }
- else{
- var iCur=parseInt(getStyle(obj,attr));
- }
- var iSpeed=(json[attr]-iCur)/8;
- iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
- if(iCur==json[attr]){
- clearInterval(obj.timer);
- if(fn){
- fn(); //有传函数这个参数才执行,不然会出错
- }
- }
- else{
- if(attr=='opacity'){
- obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
- obj.style.opacity=(iCur+iSpeed)/100;
- }
- else{
- obj.style[attr]=iCur+iSpeed+'px'
- }
- }
- }
- },30);
- };
这样还有个问题
- if(iCur==json[attr]){
- clearInterval(obj.timer);
- }
只要 json 里有任一值到达目标,计时器就停止
比如我让宽度变到 103,高度变到 300,那高度到不了 300 就停止了
解决方案
- function startMove(obj,json,fn){
- clearInterval(obj.timer);
- obj.timer=setInterval(function(){
- var bStop=true; //先定义一个值,假设所有值都到了
- for(var attr in json){
- if(attr=='opacity'){
- var iCur=parseInt(parseFloat(getStyle(obj,attr))*100);
- }
- else{
- var iCur=parseInt(getStyle(obj,attr));
- }
- var iSpeed=(json[attr]-iCur)/8;
- iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
- if(iCur!=json[attr]){
- bStop=false; //并不是所有值都到了,就把bStop设成 false
- }
- if(attr=='opacity'){
- obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
- obj.style.opacity=(iCur+iSpeed)/100;
- }
- else{
- obj.style[attr]=iCur+iSpeed+'px'
- }
- }
- if(bStop){ //所有值都到了,关闭定时器
- clearInterval(obj.timer);
- if(fn){
- fn(); //有传函数这个参数才执行,不然会出错
- }
- }
- },30);
- };
希望本文所述对大家 JavaScript 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0518/329373.html