在网上查了一下,Jquery动画在IE下出现抖动,是因为浏览器解析该页面并没有采用标准模式,而Jquery动画必须是在标准模式之下,也就是strict mode。
+ R* M& |7 H( l. a如果不在HTML前制定DOCTYPE,那么IE会使用怪癖模式,也就是Quirks Mode解析该页面。从科学地角度讲,我们还是应该制定为strict mode的。但是难保你当初为了省事而忘记写了,结果项目越做越大了。( J' L( N7 O# S- r; P3 m
而你又恰恰使用了Jquery,你可以选在再把制定为strict mode的这行代码
X3 ]! z" z) X. G<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/codefilter_code], `* y" k) f5 N) A# s, d& u# ]/ V
加上去,Jquery动画正常了,可许多页面布局又乱掉了。很显然得不偿失啊。' u1 n& a* r% R5 I, u: c
下面就是改写Jquery动画中的slideUp和slideDown,(我发现自己有写的让别人看不懂的能力,谁叫怪事太多了呢)。
' b; p8 s r. v/ @2 z( b9 ](function($){
! `* }; D$ I+ z$ k: J var timer;
3 ?) K6 ~: ` l* d' f2 b $.fn.customSlide = function(options){+ H: L4 y' k- f5 R1 I
var defaults = {
1 G& a& a; d- T+ V2 |9 T4 d 'flag' : 'down', //the flag using differing "SlideDown" and "SlideUp"" R- Z- E9 y" p8 C
'delay' : 10, // the delay of the slide function5 M7 D9 o+ N {; h) t
'distance' : 10 //the distance of the element's each step+ L5 W* g' I$ x+ @5 H
};
, k7 s+ h" l$ t# J( Zvar options = $.extend(defaults, options);
6 G2 w. S' V% k9 |+ e* F: S7 p4 fthis.each(function(){
3 n) u7 ]0 @. W& h J6 w6 Z $(this).css('overflow', 'hidden');% d% p& w' `: K8 l. a" m1 L% x
clearInterval(timer);& c; f& m4 q4 f3 `, a! A
var initHeight = $(this).height();
# g1 ]0 R& V/ B' P* E% j. d0 j( n if(typeof $(this).data('initHeight') == 'undefined'){$(this).data('initHeight', initHeight);}
+ M) Y6 I& w* P$ k ~ if(typeof $(this).data('initAction') == 'undefined'){$(this).data('initAction', true);}
# e; P9 P: F) ^0 S) _ if(options.flag == 'up'){
+ |/ Q. w% E% E6 d8 F+ n, \& L6 Wtimer = setInterval($(this).slide(parseInt('-' + options.distance)), options.delay);
$ l- d+ e5 `6 T7 o! i }else{
* ^! j; c1 p7 O$ ]8 [ timer = setInterval($(this).slide(options.distance), options.delay);
! A/ I# k" B4 `: {/ |; O0 } }
! q8 f7 _4 p+ I0 D: J; }});; X# V( n& |4 g& V. L5 y
};8 V/ k/ e" X0 c4 A5 M& c
$.fn.slide = function(distance){! t! L% G7 Q# i0 |8 e2 Q9 i9 W( h
var element = this;
6 n1 |2 Z8 P! M return function(){
1 |) j2 V5 X* _9 t# O$ {( t0 y var height = element.height() + distance;
9 Q+ }- Q R2 s if(typeof element.data('initAction') != 'undefined' && element.data('initAction')){9 b' c2 r" X% i6 I' T- M3 Q
height = 1;2 w- ^/ a7 d& O4 i) {* W
element.height(height);
7 D: ~2 Z: Z/ x6 R( }) I; ]- ]# L& f; Welement.show();
2 ]. g9 g. D! q% l! J& ~element.data('initAction', false);
1 U" u+ i) j5 ?" J! p0 b* l }
4 a, Q0 Q' Y. x% E if(height < 0){
4 k8 Q0 g$ X7 w8 x% z V. d4 E element.height(0);) |* H$ w9 J, c/ U- P! q8 @+ ?7 ^7 S
element.hide();
2 T/ H6 e @# I6 G- z2 Y* }if(typeof element.data('initAction') != 'undefined' && !element.data('initAction')){
; q* g1 b/ z. M1 s, S element.data('initAction', true);* K5 J! ?9 |' r+ p- s. r% J
}
2 P* E8 B+ B! Y( i/ s9 TclearInterval(timer);0 G2 s/ d/ @1 B% c4 s
}else if(height > element.data('initHeight')){$ e; C! N6 v/ e4 D0 p- _0 p
element.height(element.data('initHeight'));
/ k# B4 K" e, M7 ~clearInterval(timer);* f1 c$ B) ^1 W: C
}else{
1 G$ ?* O* E" p5 h7 _ element.height(height); t7 U6 R8 `/ K# O; o
}, Q. g; ]% l3 _8 {* c
};6 A2 Z# {2 a2 N- x8 P/ X
}: ?: u( H& _6 ^
})(jQuery)2 {+ h2 j, I9 W8 Y7 @$ v" v
7 i6 @" P$ N3 y, n- p4 N7 X+ G
0 e+ I3 z6 c. g0 O8 z' t% {( ?! u1 K- M+ j+ S
2 p+ c0 m! Z) U/ }: }8 W感谢溯游分享!!!/ A% C z Z' I3 }
- f) ~& D `" V% T) s$ R
$ W* G$ j; V( R& ^. V+ N
' D2 P/ V# @+ Z& @# ~7 ^: f& h* s) T8 [5 w7 `; }* A1 L
6 O" [7 Q- z1 y0 T# U |
|