在网上查了一下,Jquery动画在IE下出现抖动,是因为浏览器解析该页面并没有采用标准模式,而Jquery动画必须是在标准模式之下,也就是strict mode。0 f/ v4 h& `: n% c- b5 z
如果不在HTML前制定DOCTYPE,那么IE会使用怪癖模式,也就是Quirks Mode解析该页面。从科学地角度讲,我们还是应该制定为strict mode的。但是难保你当初为了省事而忘记写了,结果项目越做越大了。" y5 W3 _# G$ q
而你又恰恰使用了Jquery,你可以选在再把制定为strict mode的这行代码# H, ? A0 e* }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/codefilter_code]
% T- d# E" ^8 e7 v/ g; M加上去,Jquery动画正常了,可许多页面布局又乱掉了。很显然得不偿失啊。3 k7 @2 q: y1 h# \- f9 @
下面就是改写Jquery动画中的slideUp和slideDown,(我发现自己有写的让别人看不懂的能力,谁叫怪事太多了呢)。$ K) K/ c; ]7 b3 F
(function($){
3 L9 G% o1 v U( B, H% }( U var timer;
9 c" S- O. Z( b) D/ i7 k( d! }3 T# L $.fn.customSlide = function(options){
3 o# u, I/ L- s* S' c1 V0 d var defaults = {
4 q& I5 T% h) \8 D 'flag' : 'down', //the flag using differing "SlideDown" and "SlideUp"
' L5 c) x5 `8 p% |6 I* l/ U/ r 'delay' : 10, // the delay of the slide function
5 ?9 b9 C) {! L# t( f1 B# L7 @: S% R$ H 'distance' : 10 //the distance of the element's each step% t4 a7 x0 z% @9 g5 R
};$ y$ D* p1 c) X7 R) C
var options = $.extend(defaults, options);
8 U" `# h' ^9 y# U" A- e: S$ Kthis.each(function(){- B* z; c" j( A0 P% b% s
$(this).css('overflow', 'hidden');
9 C" i3 J/ h% d% z clearInterval(timer);
1 \6 r" {/ u8 b$ {% r8 }/ I var initHeight = $(this).height();
2 \) t! B- |' x# v: Z+ }7 @ if(typeof $(this).data('initHeight') == 'undefined'){$(this).data('initHeight', initHeight);}
; ]% P: [) d: F8 e& k1 {8 g if(typeof $(this).data('initAction') == 'undefined'){$(this).data('initAction', true);}5 y5 v# S% p! _' i- v/ [/ r
if(options.flag == 'up'){. v* t* G. @, L0 p9 \& B
timer = setInterval($(this).slide(parseInt('-' + options.distance)), options.delay);2 H2 r$ U' W d! P3 M
}else{+ u6 ~0 Q( r$ G& h+ Z* c6 Q: g1 d
timer = setInterval($(this).slide(options.distance), options.delay);, v. I3 R& [$ Q _, c# X7 P
}
& o; P2 v$ f1 T8 b; r1 ~});. _1 a. |3 u' v; ~
};3 }, {) |5 k0 C9 p
$.fn.slide = function(distance){
- p- d4 Y# p- z3 r6 Q9 z0 F% s var element = this;
' G2 s6 f( x0 ^; H3 X" ?$ O* E% C return function(){2 P. ?$ z. o/ I7 I+ z% L4 e
var height = element.height() + distance;3 b/ T' ], `0 l
if(typeof element.data('initAction') != 'undefined' && element.data('initAction')){, Y4 A+ G$ h2 c( P
height = 1;
) f& c9 V+ v3 e% K+ A$ W element.height(height);" Z9 [: W5 l" v/ e; T# s7 X
element.show();
9 ^$ p5 V0 v! U: I: |6 ~2 w7 Felement.data('initAction', false);9 I1 \. u( Q* S; q! D% B
}6 |3 N$ q% h& R9 C6 _ A; K* E
if(height < 0){$ S0 f% k( `# A. E: d' K
element.height(0);
" @' c# v0 |# b" A% [0 o element.hide();
' y, O# k$ @' o2 N; Z" Fif(typeof element.data('initAction') != 'undefined' && !element.data('initAction')){6 R ?) j4 d* l! _5 C! g! \. p
element.data('initAction', true);
& M0 D) [6 e( D }
4 v" @" S$ R r2 y% M+ ?$ g4 g8 iclearInterval(timer);
% x* E: y, C- [; w B }else if(height > element.data('initHeight')){6 W" t% d/ A% u7 _$ I l
element.height(element.data('initHeight'));
4 a$ S, a9 M, OclearInterval(timer);
2 F- d/ B8 ]2 x6 ] L% Z }else{
( X6 d# F! \' A1 _: q: Q9 I element.height(height);0 L/ `" e( t6 A1 T
}
l% E- k4 ]) m& r};+ t% X+ A: X! ], p8 x' M" M7 I
}- ~! {/ }' |, n6 n2 Q3 i" g
})(jQuery) @) j4 Z- W# @9 j: d4 h
' z: s( b) M2 X$ `8 N9 f
7 B3 o6 q9 }9 n/ K# S+ [" |( d$ i/ u2 j7 h4 V. ^
$ n' Z6 H/ W" [4 }2 ?" ^感谢溯游分享!!!
! l# a- l4 p' {! Y
; I0 }, O% Q" b% d [! `. N$ n- _8 y* ]1 e5 `. w
' B+ C4 X8 M- M7 i y9 g! f" f4 F
4 o2 l# Y; c+ h) y |
|