Javascript学习第二季-实战9 站长,站长素材网,站长资源网,手把手教你做网站美容师 今日更新:0 篇;   本站目前共有文章:210 篇。
当前位置: 网站首页>技术教程 > Javascript-教程 正文
1 次

Javascript学习第二季-实战9

来源:本站原创 编辑:admin 时间:2008年10月14日 浏览:

点击下载Javascript学习第二季-实战9 点击下载Javascript学习第二季-实战9

 

  1. Javascript学习第二季(实战9)  
  2.  
  3.     上一个 javascript图片馆,动画速度太慢,这次我们将它改进。  
  4.       
  5.  
  6. Demo1:  
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  
  8. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
  9. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
  10. <head> 
  11.   <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
  12.   <title>test</title> 
  13.   <style type="text/css" media="screen"> 
  14.  #slideshow {  
  15.   width: 100px;  
  16.   height: 100px;  
  17.   position: relative;  
  18.   overflow: hidden;  
  19. }  
  20. #preview {  
  21.   position: absolute;  
  22. }  
  23.   </style> 
  24.   <script type="text/javascript"> 
  25.   /*  
  26.   这是最终优化的例子.  
  27.   */  
  28.   function addLoadEvent(func) {  
  29.   var oldonload = window.onload;  
  30.   if (typeof window.onload != 'function') {  
  31.     window.onload = func;  
  32.   } else {  
  33.     window.onload = function() {  
  34.       oldonload();  
  35.       func();  
  36.     }  
  37.   }  
  38. }  
  39.  
  40. //js有insertBefore方法,但没有insertAfter方法,我们自己写一个。  
  41. /*  
  42. 参数解释:  
  43. newElement : 新元素  
  44. targetElement : 目标元素 , 也就是要插入的地方。  
  45. */  
  46. function insertAfter(newElement,targetElement) {  
  47.   var parent = targetElement.parentNode;   //目标元素的父节点  
  48.   if (parent.lastChild == targetElement) { //如果父节点的最后一个节点 是目标元素。  
  49.     parent.appendChild(newElement);        //那么 直接 appendchild。  因为appendchild默认就是添加到最后。  
  50.   } else {  
  51.     parent.insertBefore(newElement,targetElement.nextSibling);  
  52.     //反之,插入到目标元素的下一个兄弟节点的 前面。  
  53.     //也就是目标元素的后面。。。^_^  
  54.   }  
  55. }  
  56.  
  57. /*  
  58. 参数解释:  
  59. elementID : 元素的ID  
  60. final_x : 最后的x坐标的值。  
  61. final_y : 最后的y坐标的值。  
  62. interval : 时间间隔。 (建议 取 10或者20)  
  63. */  
  64. function moveElement(elementID,final_x,final_y,interval) {  
  65.    // 判断浏览器是否支持这些方法。  
  66.   if (!document.getElementById) return false;  
  67.    // 判断这些元素是否存在。  
  68.   if (!document.getElementById(elementID)) return false;  
  69.   var elem = document.getElementById(elementID);  
  70.   if (elem.movement) {//demo3 已经说明了原因。可以去看看  
  71.     clearTimeout(elem.movement);  
  72.   }  
  73.   if (!elem.style.left) {    //如果没有设置left属性,  
  74.     elem.style.left = "0px";  
  75.   }  
  76.   if (!elem.style.top) {  
  77.     elem.style.top = "0px";  
  78.   }  
  79.   var xpos = parseInt(elem.style.left);// 转换成 整数。也就是去掉 px  
  80.   var ypos = parseInt(elem.style.top);  
  81.   if (xpos == final_x && ypos == final_y) {  
  82.     return true;  
  83.   }  
  84.   /*  
  85.    在前面的例子中,都是通过 xpos++ 来偏移。  
  86.    不过速度太慢。这次我们改大点。  
  87.    通过最后的位置 减去 初始位置   然后除以 10 ,得到每次的偏移量。  
  88.    效果是 先快后慢。  
  89.   */  
  90.   if (xpos < final_x) {  
  91.     var dist = Math.ceil((final_x - xpos)/10);  
  92.     xposxpos = xpos + dist;  
  93.     /*  
  94.     解释一下  Math.ceil()方法:  
  95.     对一个数进行上舍入。参数必须是一个数值。  
  96.     什么是上舍入?  
  97.     比如 0.2  
  98.     如果 Math.ceil(0.2);  
  99.     则得到  2  。  
  100.     */  
  101.   }  
  102.   if (xpos > final_x) {  
  103.     var dist = Math.ceil((xpos - final_x)/10);  
  104.     xposxpos = xpos - dist;  
  105.   }  
  106.   if (ypos < final_y) {  
  107.     var dist = Math.ceil((final_y - ypos)/10);  
  108.     yposypos = ypos + dist;  
  109.   }  
  110.   if (ypos > final_y) {  
  111.     var dist = Math.ceil((ypos - final_y)/10);  
  112.     yposypos = ypos - dist;  
  113.   }  
  114.   elem.style.left = xpos + "px";// 这里注意把单位 加上  
  115.   elem.style.top = ypos + "px";  
  116.   var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";  
  117.       /*  
  118.   提醒下;  
  119.   setTimeout 第一个参数是 字符串, 第二个参数是 数值。  
  120.   */  
  121.   elem.movement = setTimeout(repeat,interval);  
  122.   //至于为什么是   elem.movement 而不是 直接  movement 。 demo3 已经做过介绍。  
  123. }  
  124.  
  125.  
  126. function prepareSlideshow() {  
  127.    // 判断浏览器是否支持这些方法。  
  128.   if (!document.getElementsByTagName) return false;  
  129.   if (!document.getElementById) return false;  
  130.    // 判断这些元素是否存在。  
  131.   if (!document.getElementById("linklist")) return false;  
  132.   //demo3中是直接写在html中,因为那段html是就只是为了切换图片而工作。  
  133.   //所以把那段代码移到js里来,也未尝不可。  
  134.   //下面的代码是创建一段html代码。  
  135.   /* 等价于:  
  136.   <div id="slideshow"> 
  137.     <img src="topics.gif" alt="test" id="preview" /> 
  138.    </div> 
  139.   */  
  140.   var slideshow = document.createElement("div");  
  141.   slideshow.setAttribute("id","slideshow");  
  142.   var preview = document.createElement("img");  
  143.   preview.setAttribute("src","topics.gif");  
  144.   preview.setAttribute("alt","test");  
  145.   preview.setAttribute("id","preview");  
  146.   slideshow.appendChild(preview);//注意: 创建完后,必须appendChild给某个元素 或者 insertBefore 某个地方.  
  147.  
  148.   var list = document.getElementById("linklist");  
  149.   insertAfter(slideshow,list);// 调用insertAfter 函数  
  150.  
  151.   var links = list.getElementsByTagName("a");  
  152.  
  153.   links[0].onmouseover = function() {  
  154.     moveElement("preview",-100,0,10);  
  155.   }  
  156.   links[1].onmouseover = function() {  
  157.     moveElement("preview",-200,0,10);  
  158.   }  
  159.   links[2].onmouseover = function() {  
  160.     moveElement("preview",-300,0,10);  
  161.   }  
  162.  
  163. }  
  164. addLoadEvent(prepareSlideshow);  
  165.  
  166.   </script> 
  167.    
  168. </head> 
  169. <body> 
  170.  
  171.   <ol id="linklist"> 
  172.     <li> 
  173.       <a href="#">AAAAAAA</a> 
  174.     </li> 
  175.     <li> 
  176.       <a href="#">BBBBBBBB</a> 
  177.     </li> 
  178.     <li> 
  179.       <a href="#">CCCCCCC</a> 
  180.     </li> 
  181.   </ol> 
  182.  
  183. </body> 
  184. </html> 
  185.  
  186.  
  187. 如果你是一名jquery的爱好着,想要用jquery写出类似的效果,  
  188. 可以参考下面的代码:  
  189. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  
  190. "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
  191. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
  192. <head> 
  193.   <meta http-equiv="content-type" content="text/html; charset=gbk" /> 
  194.   <title>Animation</title> 
  195.   <script src="../jquery.js" type="text/javascript"></script> 
  196.  <style type="text/css" media="screen"> 
  197.  #slideshow {  
  198.   width: 100px;  
  199.   height: 100px;  
  200.   position: relative;  
  201.   overflow: hidden;  
  202. }  
  203. #preview {  
  204.   position: absolute;  
  205. }  
  206.   </style> 
  207.     
  208.   <SCRIPT LANGUAGE="JavaScript"> 
  209.     $(function(){  
  210.            $('<div id="slideshow"><img src="topics.gif" alt="test" id="preview"/></div>').appendTo('body')  
  211.            .find('#preview').css({'left':'0px','top':'0px'});  
  212.              
  213.           $('#linklist li a').eq(0).mouseover(function(){  
  214.                $('#preview').animate({ left : -100  }, { queue : false , duration : 'normal'});  
  215.           })  
  216.           $('#linklist li a').eq(1).mouseover(function(){  
  217.                $('#preview').animate({ left : -200  }, { queue : false , duration : 'normal'});  
  218.           })  
  219.           $('#linklist li a').eq(2).mouseover(function(){  
  220.                $('#preview').animate({ left : -300  }, { queue : false , duration : 'normal'});  
  221.           })   
  222.    
  223.     })  
  224.   </SCRIPT> 
  225.  
  226. </head> 
  227. <body> 
  228.  
  229.   <ol id="linklist"> 
  230.     <li> 
  231.       <a href="#">AAAAAAA</a> 
  232.     </li> 
  233.     <li> 
  234.       <a href="#">BBBBBBBB</a> 
  235.     </li> 
  236.     <li> 
  237.       <a href="#">CCCCCCC</a> 
  238.     </li> 
  239.   </ol> 
  240.  
  241. </body> 
  242. </html> 
  243.  
  244. 终于 我们的第二个 产品出炉了。  
  245. 这是我们的第二个 图片馆,效果是不是非常之cool。  
  246. 想必大家都在为这几天的辛勤劳动 而获得的成果而喜悦。  
  247.  
  248. 好了,就说到这里了,满累的。。。  
  249.  
  250. 我们的 第二季 实战  就说到这里了。  
  251. 你如果觉得不够,可以自己想些例子,然后自己写代码去实现。  
  252.  
  253. 祝好运。  

 

本站解压密码:www.web265.com
Tags:0

上一篇:Javascript学习第二季(实战8)

下一篇:js中类的基本概念-1

赞助商友情链接

站长常用工具

更多

相关文章

更多

    {$CorrelationArticleList(2§ID Desc§10§§20§25§1§false§false§0§""§§0§left§§§§
  • #Title
  • )}