/* =========== js 애니메이션 ============ */
/* @author:hongru.chen */
/* ====================================*/
if(HR 유형 == '정의되지 않음' || !HR)
HR = {
extend : 함수(대상, 소스, 재정의) {
if(재정의 === #ff0000) override = true
for; (소스의 var 속성) {
if (재정의 || !(대상의 속성)) {
destination[property] = source[property];
}
}
반환 대상;
}
};
(function () {
var Tween = { // 다음 연산자의 매개변수가 각각 표시됩니다. t: 실행 시간, b: 시작 금액, c: 총 변화량, d: 총 시간
선형: 함수(t,b,c,d){ return c*t/d b },
쿼드: {
easeIn: function(t; , b,c,d){
return c*(t/=d)*t b
},
easeOut: function(t,b,c,d){
return -c; * (t/=d)*(t-2) b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < ; 1) return c/2*t*t b;
return -c/2 * ((--t)*(t-2) - 1) b
}
},
큐빅: {
easeIn: 함수(t,b,c,d){
return c*(t/=d)*t*t b
},
easeOut: 함수(t, b ,c,d){
return c*((t=t/d-1)*t*t 1) b
},
easeInOut: function(t,b,c,d; ) {
if ((t/=d/2) < 1) return c/2*t*t*t b
return c/2*((t-=2)*t*t 2; ) b;
}
},
쿼트: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t * t b
},
easeOut: function(t,b,c,d){
return -c * ((t=t/d-1)*t*t*t - 1) b ;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t * t b
return -c/2 * ((t-=2)*t*t*t - 2) b
}
},
Quint: {
easeIn: 함수 (t,b,c,d){
return c*(t/=d)*t*t*t*t b
},
easeOut: 함수(t,b,c, d ){
return c*((t=t/d-1)*t*t*t*t 1) b
},
easeInOut: function(t,b,c,d; ) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t b
return c/2*((t-=2)* t *t*t*t 2) b;
}
},
사인: {
easeIn: function(t,b,c,d){
return -c * Math .cos(t/d * (Math.PI/2)) c b;
},
easeOut: function(t,b,c,d){
return c * Math.sin(t/ d * (Math.PI/2)) b;
},
easeInOut: function(t,b,c,d){
return -c/2 * (Math.cos(Math.PI * t/d) - 1) b;
}
},
Expo: {
easeIn: function(t,b,c,d){
return (t==0 ) ? b : c * Math.pow(2, 10 * (t/d - 1)) b
},
easeOut: function(t,b,c,d){
return ( t ==d) ? b c : c * (-Math.pow(2, -10 * t/d) 1) b
},
easeInOut: function(t,b,c,d)
if (t==0) return b;
if (t==d) return b c
if ((t/=d/2) < 1) return c/2 * 수학. pow (2, 10 * (t - 1)) b;
return c/2 * (-Math.pow(2, -10 * --t) 2) b
}
},
원: {
easeIn: function(t,b,c,d){
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) b;
},
easeOut: function(t,b,c,d){
return c * Math.sqrt(1 - (t=t/d-1)*t) b; } ,
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t* t ) - 1) b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) 1) b
}
},
탄력적: {
easeIn: function(t,b,c,d,a,p){
if (t==0) return b if ((t/=d)==1) return b if ( !p) p=d*.3;
if (!a || a < Math.abs(c)) { a=c var s=p/4 }
else s = p / (2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s ) *(2*Math.PI)/p )) b;
},
easeOut: function(t,b,c,d,a,p){
if (t==0) return b; if ((t/=d)==1) return b c; if (!p) p=d*.3
if (!a || a < Math.abs(c)) a =c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a)
return (a*Math.pow(2) , -10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) c b)
},
easeInOut: function(t,b,c,d, a ,p){
if (t==0) return b; if ((t/=d/2)==2) return b c; if (!p) p=d*(.3*1.5) ;
if (!a || a < Math.abs(c)) { a=c; var s=p/4 }
else var s = p/(2*Math.PI) * 수학 .asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t* d-s )*(2*Math.PI)/p )) b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*( 2 *Math.PI)/p )*.5 c b
}
},
뒤로: {
easeIn: function(t,b,c,d,s){
if (s == 정의되지 않음) s = 1.70158;
return c*(t/=d)*t*((s 1)*t - s) b
},
easeOut: function( t ,b,c,d,s){
if (s == 정의되지 않음) s = 1.70158;
return c*((t=t/d-1)*t*((s 1)* t s ) 1) b;
},
easeInOut: function(t,b,c,d,s){
if (s == 정의되지 않음) s = 1.70158
if ((t / =d/2) < 1) return c/2*(t*t*(((s*=(1.525)) 1)*t - s)) b; t -=2)*t*(((s*=(1.525)) 1)*t s) 2) b
}
},
바운스: {
easeIn: function(t , b,c,d){
return c - Tween.Bounce.easeOut(d-t, 0, c, d) b
},
easeOut: function(t,b,c,d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) b
} else if (t < (2/2.75) ) ) {
return c*(7.5625*(t-=(1.5/2.75))*t .75) b
} else if (t < (2.5/2.75)) {
return c *(7.5625*(t-=(2.25/2.75))*t .9375) b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t . 984375 ) b;
}
},
easeInOut: function(t,b,c,d){
if (t < d/2) return Tween.Bounce.easeIn(t*2, 0, c, d) * .5 b ;
그렇지 않으면 Tween.Bounce.easeOut(t*2-d, 0, c, d) * .5 c*.5 b를 반환합니다.
}
}
}
var get = function(id) {
var d = document, a = -1;
this.elements = [];
if (typeof ids != 'string' && !!ids.length) {
for (var i=0; i
var id = ids[i], 영형;
o = ID 유형 == '문자열' ? d.getElementById(id) : id;
this.elements.push(o);
}
} else {
while(typeof 인수[ a] == 'string') {
this.elements.push(d.getElementById(arguments[a]));
}
}
}
get.prototype = {
each : function (fn) {
for (var i=0; ifn.call(this, this.elements[i])
}
이것을 반환합니다.
},
setStyle : function (p, v) {
this.each(function (el) {
el.style[p] = v;
});
이것을 돌려주세요;
},
show : function () {
var _this = this;
this.each(function (el) {
_this.setStyle('display', 'block');
})
이것을 반환합니다.
},
hide : function () {
var _this = this;
this.each(function (el) {
_this.setStyle('display', 'none');
})
이것을 반환합니다.
},
animate: function (config) {
if (!this.animQueue) this.animQueue = HR._animQueue = [];
var a = 0, 시간, 트윈, 용이성, 콜백;
while (arguments[ a]) {
if (typeof 인수[a] == 'number') time = 인수[a];
if (인수 유형[a] == '문자열') {
if (/^ease*/.test(arguments[a])) easy = 인수[a];
else tween = 인수[a];
}
if (HR.isFunction(arguments[a])) 콜백 = 인수[a];
}
this.animQueue.push({
config: config,
time: time,
tween: tween,
ease: easy,
callback: 콜백
});
if (this.animQueue.length == 1) this.execute(this.animQueue);
이것을 돌려주세요;
},
stop : function (clearQueue) {
if (clearQueue) HR._animQueue.length = 0;
this.each(function (el) {
if (!!HR.timers[el.id])
for (var i=0; i});
이것을 돌려주세요;
},
execute : 함수(큐) {
var _this = this, m = 0, n = 0,
_anim = 함수(el, key, from, to, at , tw, easy, cb) {
var isOP = (key == 'opacity' && !HR.support.opacity), _key = key;
if (isOP) {to = to*100; _key = '필터'}
var s = 새 날짜,
d = at,
b =parseFloat(from) || 0,
c = to-b;
(함수 () {
var t = new Date - s;
if (t >= d) {
n ;
t = d;
el .style[_key] = (isOP ? 'alpha(opacity=' : '') Tween.Linear(t, b, c, d) (key != 'opacity' ? 'px' : '') (isOP ? ' )' : '');
!!cb && cb.apply(el)
if (m == n && _this.animQueue.length > 1) {
_this.animQueue.shift( );
_this.execute(_this.animQueue);
}
return;
}
el.style[_key] = (isOP ? 'alpha(opacity=') '') Tween[tw][ease](t, b, c, d) (key != 'opacity' ? 'px' : '') (isOP ? ')' : ''); >if (!HR.timers[el.id]) HR.timers[el.id] = [];
HR.timers[el.id].push(setTimeout(arguments.callee, 16))
})();
},
_q = this.animQueue[0];
return this.each(function (el) {
for (var k in _q.config) {
m ;
_anim(el,
k,
k == '불투명도' && !HR.support.opacity ? HR.getStyle('filter', el) == '' 100 :parseInt(HR.getStyle('filter', el).match(/d{1, 3}/g)[0]) : HR.getStyle(k, el),
_q.config[k],
typeof _q.time == 'number' ? _q.time : 1000,
typeof _q.tween == 'string' && !/^ease*/.test(_q.tween) ? _q.tween : 'Quart',
typeof _q.ease == 'string' && /^ease* /.test(_q.ease) ? _q.ease : 'easeOut',
_q.callback)
}
});
}
}
HR.extend(HR, {
get : function () {
return new get(arguments);
},
isFunction : function(o) {
return typeof(o) == 'function' && (!Function.prototype.call || typeof(o.call) == 'function')
},
getStyle : function (p, el) {
return el.currentStyle ? el.currentStyle[p] : document.defaultView.getComputeStyle(el, null).getPropertyValue(p)
},
지원 : ( function () {
try {
var d = document.createElement('div')
d.style['display'] = 'none';
d.innerHTML = '< a style="float:left; opacity:.5;">'
var a = d.getElementsByTagName('a')[0];
return {
불투명도 : a.style.opacity === '0.5'
}
} 마침내 {
d = null
}
})(),
타이머 : { }
});
})();
그러면 모두가 좀 더 직관적으로 사용할 수 있도록 두 개의 데모를 만들었습니다.
【demo1】
외부 J를 도입해야 하는 경우 실행하려면 새로 고쳐야 합니다.
]