在网上查了一下,Jquery动画在IE下出现抖动,是因为浏览器解析该页面并没有采用标准模式,而Jquery动画必须是在标准模式之下,也就是strict mode。
9 q6 T( F: O5 k/ x, M& w如果不在HTML前制定DOCTYPE,那么IE会使用怪癖模式,也就是Quirks Mode解析该页面。从科学地角度讲,我们还是应该制定为strict mode的。但是难保你当初为了省事而忘记写了,结果项目越做越大了。
9 e; V3 Y0 s( X+ R3 T6 f' r$ {而你又恰恰使用了Jquery,你可以选在再把制定为strict mode的这行代码 K$ }8 B4 u* K4 U2 k2 w+ e
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">[/codefilter_code]
. o0 H$ Y+ K( \8 T6 ?* k' i加上去,Jquery动画正常了,可许多页面布局又乱掉了。很显然得不偿失啊。
+ z/ K! z+ L# _6 m7 j: b0 p1 O. r! d下面就是改写Jquery动画中的slideUp和slideDown,(我发现自己有写的让别人看不懂的能力,谁叫怪事太多了呢)。
8 w, u3 g; l4 l(function($){8 n) r0 i+ z3 W5 t
var timer;
) T4 ^) n: q+ ?% D! Q; L3 t% \: Q2 o $.fn.customSlide = function(options){
2 }: I- c. A5 i+ l* d var defaults = {
' {, N8 Z- R, H/ N; h1 J+ T% _0 z 'flag' : 'down', //the flag using differing "SlideDown" and "SlideUp"
" t. @0 _; R0 B7 g: d$ v 'delay' : 10, // the delay of the slide function
4 _$ u; j) a" U+ U; N 'distance' : 10 //the distance of the element's each step
8 E; R. G9 z4 E& c9 ~, f};0 |. u# Y& u8 x% l! P
var options = $.extend(defaults, options);
# A8 [0 R) r( a4 W2 Mthis.each(function(){
7 O( Q% x1 i8 o: L- l1 e$ I $(this).css('overflow', 'hidden');% f+ P1 l, w* }
clearInterval(timer);, S3 B& b8 {6 e- H5 z
var initHeight = $(this).height();
( H( l# f! F7 Z3 M# R if(typeof $(this).data('initHeight') == 'undefined'){$(this).data('initHeight', initHeight);}+ [* x9 C3 T2 b) v# x8 v
if(typeof $(this).data('initAction') == 'undefined'){$(this).data('initAction', true);}
) T6 F: ^0 |+ L6 O" y- P) }/ d$ h0 X+ f W if(options.flag == 'up'){( q) X/ `% `8 T- G8 O$ }
timer = setInterval($(this).slide(parseInt('-' + options.distance)), options.delay);0 h ~; e4 [$ j* y* k8 o3 j' [& M
}else{, v& N, y# f4 B. y @' J6 N ]# D
timer = setInterval($(this).slide(options.distance), options.delay);
" b g. F8 |2 x6 X+ T }; R: X9 O# N$ [+ \! g* F
});1 c5 ?; O' i- B' {4 |% Q
};) h+ R6 d v r6 C* ~" C1 N( |
$.fn.slide = function(distance){# I; p, n8 I! s! W. A1 Q9 p! f
var element = this;9 m, x( H0 {9 p7 h$ f
return function(){( u. }* j7 y' ?. i1 i" e4 N! q
var height = element.height() + distance;
! |1 m- D) D6 @ if(typeof element.data('initAction') != 'undefined' && element.data('initAction')){" x* i! U2 q& y% {
height = 1;1 R F; u1 U7 t) v9 i. D5 u' g
element.height(height);
0 r; S1 p' t- I5 Y% Delement.show();' z' D `( W; C$ I" [
element.data('initAction', false);# X9 Z. d( @9 Z+ y* {) W
}
/ ~" |( F1 j2 @! L1 u if(height < 0){
' p) ~8 N0 [9 z element.height(0);/ g% X0 g- m7 O; e; M T$ W
element.hide();4 z2 ?8 o& M2 o- L M
if(typeof element.data('initAction') != 'undefined' && !element.data('initAction')){9 }" p! q$ s) N! i
element.data('initAction', true);
. r z; ?: u) Q& i }
3 n9 i. ~% U+ uclearInterval(timer);
4 A# ^$ m- h! v6 c }else if(height > element.data('initHeight')){# q ?" m* X0 }6 d) ^: B% Q
element.height(element.data('initHeight'));% ^2 N8 n8 i# V$ P% R r% M3 G9 S
clearInterval(timer);
$ M1 ^3 m( H7 P5 a' O' s }else{
. l0 Z& k2 r4 R& o' t a' O element.height(height);9 Q% T. b0 L* @" g! J
}
) e* q$ x: C. @1 E* ]};
2 |# T# u) n! h4 s Q/ u }
/ r& N/ j( H8 ]# t% G- \})(jQuery)! O( C0 h) I: n% H& O: \4 ^
$ `- J* b* Z" e" {7 M6 r
* M7 E; T( ?3 F/ @- Z# S3 ?2 X/ t! h& w) \/ D1 m
9 t/ X3 `& i; f
感谢溯游分享!!!
% B7 Y* k: J) @2 h- Q. i% g/ |
" ~. H# b t4 u* B/ Y$ l5 J& j+ g
- \# [( B; \- s: o" f1 P: W0 A9 j% u$ s4 ^4 V
" \% K1 Y: m! X6 X0 F% s) i! ~
7 o1 L; e- z0 [7 ^5 Y
|
|