在网上查了一下,Jquery动画在IE下出现抖动,是因为浏览器解析该页面并没有采用标准模式,而Jquery动画必须是在标准模式之下,也就是strict mode。
# [ j; Q( z( b/ Y5 Q; O如果不在HTML前制定DOCTYPE,那么IE会使用怪癖模式,也就是Quirks Mode解析该页面。从科学地角度讲,我们还是应该制定为strict mode的。但是难保你当初为了省事而忘记写了,结果项目越做越大了。! E2 g- X5 Z/ I. \. d
而你又恰恰使用了Jquery,你可以选在再把制定为strict mode的这行代码- s% i4 ?2 ]6 u. y* m- p+ l( T
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/codefilter_code]
; P% i& C) C& l" d" f* ?' K6 G8 C. g加上去,Jquery动画正常了,可许多页面布局又乱掉了。很显然得不偿失啊。
6 y" G. {) `# ]; B' o( L) x下面就是改写Jquery动画中的slideUp和slideDown,(我发现自己有写的让别人看不懂的能力,谁叫怪事太多了呢)。! S# |! R) Y+ m+ B1 a) k/ q
(function($){9 y+ G4 Q- p3 c8 j7 @. l
var timer;
) \! M+ B. I: Y' e5 H5 x+ W: X $.fn.customSlide = function(options){' Y' m% z9 g' X& z
var defaults = {* ?% F! f6 g3 a# o; S
'flag' : 'down', //the flag using differing "SlideDown" and "SlideUp"& b7 D4 U# W% ^
'delay' : 10, // the delay of the slide function* L* L( e$ r# u6 y
'distance' : 10 //the distance of the element's each step* [1 i! U% w; D- d) @; n3 Q& n) s
};* v- n5 z5 v5 y, Z9 i
var options = $.extend(defaults, options);9 }6 r- H: a8 i1 U" r
this.each(function(){) o2 o( V) X. R
$(this).css('overflow', 'hidden');
& B2 H6 f7 c, L clearInterval(timer);1 y$ F, ~1 u- p; W/ _+ _' @) d
var initHeight = $(this).height();& W! {% m' ~) Z. y; [* h2 E: [# Q
if(typeof $(this).data('initHeight') == 'undefined'){$(this).data('initHeight', initHeight);}
^4 c: V+ s: h( q if(typeof $(this).data('initAction') == 'undefined'){$(this).data('initAction', true);}: Y9 {- z% c; d& r: u
if(options.flag == 'up'){
- S4 m$ ~$ P3 R1 qtimer = setInterval($(this).slide(parseInt('-' + options.distance)), options.delay);# W1 N* `/ T( v9 u6 I' y" w ~
}else{! Y5 P4 U# P V; k8 d; [) Z
timer = setInterval($(this).slide(options.distance), options.delay);
* A1 v( {0 X: @" k1 F: @ }
' q B4 p( ]5 A; Y" Z7 Z});
9 o( Z7 o2 B, w, ` };
. N) X K" ^% a) b $.fn.slide = function(distance){, U5 c, _8 |# P8 S& {
var element = this;
6 a. p' {. ?% J+ ?4 m return function(){
l7 t# e0 B: b: ^ var height = element.height() + distance;
* N5 J. J8 s1 Y2 N }0 Q; s6 H& z if(typeof element.data('initAction') != 'undefined' && element.data('initAction')){
+ Z/ K$ V+ E8 |2 L6 v5 l height = 1;% q5 y! p, z- [8 ], U8 {
element.height(height); `: c, J( p5 D, ]( s" E6 k; v
element.show();
" [* o* g8 m# V+ C0 {, h0 velement.data('initAction', false);5 {0 u/ F% P# o: G+ Q
}/ |) M* g4 E* I
if(height < 0){
) [& ?* }& u/ [1 f5 A element.height(0);4 W9 R n9 c( X" u# I1 Y+ }0 K
element.hide();3 s3 ^: B/ O2 c+ p" J
if(typeof element.data('initAction') != 'undefined' && !element.data('initAction')){: a- \/ X. } Z5 q, p
element.data('initAction', true);* W3 s' [# d& x) N
}
8 x. |& A9 t3 G; C) PclearInterval(timer);1 H4 n1 ]( R" r% }6 V7 R5 _9 W
}else if(height > element.data('initHeight')){
$ R& l. q7 x. l% h- }* n element.height(element.data('initHeight'));' O. G$ i& ^- J% O
clearInterval(timer);6 o+ C/ o: P0 Q8 S
}else{
* j% R O6 Q4 o3 `* W1 H0 U7 B, T element.height(height);
+ ~# H: X! \. b }) K' \+ [; C7 W, r
};; {5 J" x `. P
}
) m1 m! |5 @% R/ j" _# ~})(jQuery)" [0 C" _/ _& E" E
# k+ O; `5 a! |/ \- v. M) D
- o, f3 }! m7 J/ [! [4 Q, ?
5 e0 W$ v- y9 R' V3 T# R: I9 M: f6 i9 x1 X7 [% W; L$ p6 n
感谢溯游分享!!!( F: I4 ~" b) a2 M0 ^8 m
" R( q& A/ ^) t) ?# q- m/ `; z' E
9 ?0 S$ d7 L& s# e" }) E! _, \# E, |# @ c6 |3 B2 U& `7 c
, [; }, k v- m6 D
2 h. A8 E! t& A/ C |
|