首页 > 语言 > JavaScript > 正文

js实现兼容IE和FF的上下层的移动

2024-05-06 16:19:11
字体:
来源:转载
供稿:网友

本来是很简单的一个功能,可是一开始弄的时候,还有IE能实现,FF总是不能实现,在网上看了半天,也没弄出个所以然,所以在同事的帮忙下,总算弄出来了,浏览器的兼容性考的还是细节上面的东西,所有关于细节的,我会用注释标出来的。

这里给大家分享的是项目中的一个小需求,本来很简单,可是整了好久才把FF的兼容性搞定。

 

 
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <title>仿265上下层的移动(上移,下移)支持IE、FF</title> 
  5. <style type="text/css"
  6. /*<![CDATA[*/ 
  7. ul{ 
  8. width:400px 
  9. li{ 
  10. border:1px solid gray; 
  11. list-style:none 
  12. .txt{ 
  13. padding:4px; 
  14. background-color:#ffffff 
  15. /*]]>*/ 
  16. </style> 
  17. <script language="javascript" type="text/javascript"
  18. //<![CDATA 
  19. window.onload=function(){ 
  20. ggGroup(document.getElementById('test'),5); 
  21. }; 
  22. function ggGroup(ele,margin){ 
  23. margin=margin||0; 
  24. var bgcolors='#b3d580,#99c9b1,#b4a1d8,#f7c480,#d5d588,#eea2bb'.split(','); 
  25. var txtUp='上移↑',txtDown='下移↓'
  26. var panels=children(ele); 
  27. for(var i=0,h=0;i<panels.length;i++){ 
  28. var p=panels[i]; 
  29. p.style.position='absolute'
  30. p.style.width='100%'
  31. var b=document.createElement('div'); 
  32. with(b.style){ 
  33. fontSize='12px'
  34. padding='4px'
  35. backgroundColor=bgcolors[i%bgcolors.length]; 
  36. textAlign='right'
  37. b.innerHTML='<span>'+txtUp+'</span><span>'+txtDown+'</span>'
  38. b.firstChild.onclick=moveup; 
  39. b.firstChild.style.cursor='pointer'
  40. b.lastChild.onclick=movedown; 
  41. b.lastChild.style.cursor='pointer'
  42. p.insertBefore(b,p.firstChild); 
  43. p.style.top=h+'px'
  44. p.index=i; 
  45. h+=p.offsetHeight+margin; 
  46. ele.style.height=h+'px'
  47. ele.style.position='relative';  
  48. check(0,i-1);  
  49. function check(){ 
  50. for(var i=0;i<arguments.length;i++){ 
  51. var x=arguments[i]; 
  52. var c=panels[x].firstChild.childNodes; 
  53. c[0].style.visibility=x==0?'hidden':'visible'
  54. c[1].style.visibility=x==panels.length-1?'hidden':'visible'
  55. panels[x].index=x; 
  56. function moveup(evt){ 
  57. var p=evt?evt.target:event.srcElement; 
  58. p=p.parentNode.parentNode; 
  59. swap(p,panels[p.index-1]); 
  60. function movedown(evt){ 
  61. var p=evt?evt.target:event.srcElement; 
  62. p=p.parentNode.parentNode; 
  63. swap(p,panels[p.index+1]); 
  64. function swap(p1,p2){ 
  65. var N=10; 
  66. var INTV=200; 
  67. var arr1,arr2; 
  68. var t1=parseInt(p1.style.top),t2=parseInt(p2.style.top); 
  69. var h1=p1.offsetHeight+margin,h2=p2.offsetHeight+margin; 
  70. arr1=makeArr(t1,t1<t2?h2:-h2); 
  71. arr2=makeArr(t2,t1<t2?-h1:h1); 
  72. for(var i=0;i<N;i++)(function(){ 
  73. var j=i; 
  74. setTimeout(function(){ 
  75. p1.style.top=arr1[j]+"px"
  76. p2.style.top=arr2[j]+"px"
  77. if(j==N-1){ 
  78. panels[p1.index]=p2; 
  79. panels[p2.index]=p1; 
  80. check(p1.index,p2.index); 
  81. },(j+1)*INTV/N); 
  82. })(); 
  83. function makeArr(f,x){ 
  84. var ret=[]; 
  85. for(var i=0;i<N;i++) 
  86. ret[i]=Math.round(f+i*x/(N-1)); 
  87. return ret; 
  88. function children(e){ 
  89. var ret=[]; 
  90. for(var i=0,c=e.childNodes;i<c.length;i++) 
  91. if(c[i].nodeType==1) 
  92. ret.push(c[i]); 
  93. return ret; 
  94. //]]> 
  95. </script> 
  96. </head> 
  97. <body> 
  98. <ul id="test"
  99. <li> <div class="txt"><h2>Hello<br />baby</h2></div></li> 
  100. <li> <div class="txt"
  101. 显示内容1显示内容1显示内容1显示内容1 
  102. </div></li> 
  103. <li> 
  104. <div class="txt"
  105. <i>人之初,性本善</i> 
  106. </div></li> 
  107. <li> 
  108. <div class="txt"
  109. 显示内容2<br />显示<br />...<br />显示内容2! 
  110. </div></li> 
  111. </ul> 
  112. </body> 
  113. </html> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选