Home >Web Front-end >JS Tutorial >Dom element transformation effect (tool function)_javascript skills

Dom element transformation effect (tool function)_javascript skills

WBOY
WBOYOriginal
2016-05-16 18:18:14958browse

Use js to control behavior and page performance. I'm afraid it's the most common thing we use it to do...
Why jQuery is so popular, I think, on the one hand, its selector [selector] is awesome enough, and on the other hand, it should be attributed to its use in A lot of effort has been put into DOM transformation.
Therefore, adhering to the purpose of being an otaku, I spent two nights on the weekend to summarize a little and wrote a piece of code to control the transformation of dom elements. Compared with the current powerful framework, it does seem a bit clumsy, but as a daily development I think the tool function is quite practical. (This is also my original purpose ^_^).
Let’s get straight to the point, first post the complete source code: (In line with the principle of sharing and learning, you can modify the source code at will)

Copy the code The code is as follows:

//////////////* = Hongru.anim.js =*////////////
// @author: hongru.chen //
// @date: 2010-10-17 //
//////////////////// //////////////////////////
var Hongru = {
get : function (id) {return document.getElementById(id)} ,
tween : {
linear : function (f, t, d) { return t * d f; },
ease : function (f, t, d) { return -t * .5 * ( Math.cos(Math.PI * d) - 1) f; }
},
tweens: [],
tweensCnt: 0,
anim : function (obj, params) {
var self = this,
objList = [],
objReturn = [];
var animimg = function () {
var i = -1, o;
while( o = self.tweens[ i] ) {
var cTime = (new Date()).getTime() - o.start;
if (cTime < o.duration) {
for (var k in o.val) {
var m = o.val[k];
o.obj[k] = Math.ceil(o.ease(m.from, m.diff, cTime/o.duration) ) (o.cssMode ? 'px' : 0);
}
} else {
cTime = o.duration;
for (var k in o.val) {
var m = o.val[k];
o.obj[k] = Math.ceil(o.ease(m.from, m.diff, cTime/o.duration)) (o.cssMode ? 'px' : 0);
}
self.tweens.splice(i, 1);
self.tweensCnt--;
if (o.onFinish) o.onFinish (o.params);
self.stop();
}
if (!o.cssMode) o.obj.onTween();
}
};
if (typeof obj == "string" || !obj.length) objList.push(obj); else objList = obj;
for (var il = 0, l = objList.length; il < l; il ) {
var obj = this .get(objList[il]) || objList[il];
var o = {};
o.val = {};
o.cssMode = true;
o.o = obj;
o.obj = obj.style;
for (var k in params) {
var p = params[k];
if (k === "cssMode") {
if (p === false) {
o.cssMode = false;
o.obj = obj;
}
} else if (k === "onTween") {
o.obj.onTween = p;
} else if (k === "from") {
for (var i in p) o.obj[i] = o.cssMode ? (Math.ceil( p[i]) 'px') : p[i];
} else if (k === "to") {
for (var i in p) {
var from = o. cssMode ? (parseInt(o.obj[i]) || 0) : (o.obj[i] || 0);
o.val[i] = {
from: from,
diff: p[i] - from
};
}
} else o[k] = params[k];
}
if (!o.ease) o.ease = this.tween.ease;
if (!o.cssMode && params['from']) o.obj.onTween();
o.duration = params.duration ? params.duration : 1000;
o.start = (new Date()).getTime();
this.tweens.push(o);
this.tweensCnt;
if (!this.running) this.running = window .setInterval(animimg, 10);
objReturn.push(o);
}
return objReturn.length === 1 ? o : objReturn;
},
stop : function ( ) {
if (!this.tweensCnt) {
window.clearInterval(this.running);
this.running = false;
}
},
kill : function ( obj) {
if (obj) {
for (var i = 0; i < this.tweensCnt; i ) {
if (this.tweens[i] === obj || this. tweens[i].o === obj || this.tweens[i].o === this.get(obj)) {
this.tweensCnt--;
this.tweens.splice(i , 1);
this.stop();
}
}
}
},
reset : function () {
this.tweensCnt = 0;
this.stop();
while( this.tweens.length ) {
this.tweens.stop();
}
}
}

From the perspective of calling method, my implementation method is actually somewhat similar to YUI. The following is the simplest example:
Copy code The code is as follows:

Hongru.anim(id, {
from: {
top: 0,
left: 100
},
to: {
left: 500,
}
});

The following is the effect of calling this code:

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn