javascript实现跑马灯悬停放大效果

来源:互联网 发布:php curl 选项 编辑:程序博客网 时间:2024/05/16 10:24

        用过qq空间的朋友应该对这个很熟悉吧,效果蛮炫的,不过它们是用flash实现的,那么javascript可不可以呢,我琢磨了三天,终于弄的差不多了,不过还是有些地方不完善,还望大家多多谅解,我会在以后将其完善的.

        先说下思路:

首先动态创建一个html结构

<div  style="overflow-x:hidden;">
<table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td><img src="1.jpg"><img src="2.jpg"><img src="3.jpg"><img src="4.jpg">.............</td>
      <td></td>
    </tr>
</table>
</div>

这个很关键,然后设置一个计时器来模拟img的移动,并且绑定外层div的onmouseenter和onmouseleave事件.最后将外层的div对象返回.

下面看代码

  1. sx.activex.dynamicpic={
  2.     init:function(imga,border,margin,w,h,step,speed){
  3.         var demo=document.createElement("div");
  4.         var tbody=document.createElement("tbody");
  5.         var demo1=document.createElement("td");
  6.         var demo2=document.createElement("td");
  7.         var table=document.createElement("<table border=/"0/" cellspacing=/"0/" cellpadding=/"0/">");
  8.         var tr=document.createElement("tr");
  9.         demo.style.position="absolute";
  10.             demo.style.height=h+"px";
  11.             demo.style.width=w+"px";
  12.         demo.style.overflowX="hidden";
  13.         for(var i=0;i<imga.length;i++){
  14.         var img=document.createElement("img")
  15.         img.src=imga[i];
  16.         img.style.height=h+"px";
  17.         img.style.width=parseInt(w/imga.length)+"px";
  18.         demo1.appendChild(img)
  19.         }
  20.         tr.appendChild(demo1);
  21.         tr.appendChild(demo2);
  22.         tbody.appendChild(tr);
  23.         table.appendChild(tbody);
  24.         demo.appendChild(table);
  25.         var c=demo1.all;
  26.     
  27. for(var i=0;i<c.length;i++){
  28.     c[i].style.marginLeft=margin+"px";
  29.     c[i].style.border=border;
  30. }  
  31. demo2.innerHTML = demo1.innerHTML
  32. function Marquee(){
  33.     if(demo2.offsetWidth-demo.scrollLeft<=0){
  34.     //alert(demo.scrollLeft);
  35.         demo.scrollLeft-=demo1.offsetWidth;}
  36.     else{
  37.         demo.scrollLeft+=step;
  38.     }
  39. }
  40. var MyMar = setInterval(Marquee,speed);
  41. demo.onmouseenter = function(){
  42.     clearInterval(MyMar);
  43.     var t=document.elementFromPoint(window.event.clientX,window.event.clientY);
  44.     if(t.tagName!="IMG")
  45.     return;
  46.     if(t.offsetHeight>demo.offsetHeight+10)
  47.     return;
  48.     //alert(t.src);
  49.     var d=document.createElement("img");
  50.                 d.style.height=t.offsetHeight+50+"px";
  51.                 d.style.width=t.offsetWidth+50+"px";
  52.                 d.style.position="absolute";
  53.                 d.style.top="-25px";
  54.                 if(t.parentNode==demo2){
  55.                     d.style.left=t.offsetLeft+demo1.offsetWidth-20+"px";
  56.                     //alert(1);
  57.                 //demo.scrollLeft-=demo1.offsetWidth;
  58.                 }else{
  59.                 d.style.left=t.offsetLeft-25+"px";}
  60.                 //alert(d.style.left);
  61.                 //alert(window.event.clientX);
  62.                 //alert(t.offsetLeft-demo.scrollLeft+demo.offsetWidth-25);
  63.                 d.src=t.src;
  64.                 d.onmouseleave=function(){
  65.                     d.parentNode.removeChild(d);
  66.                     MyMar = setInterval(Marquee,speed)
  67.                 }
  68.                 //alert(1);
  69.                 //demo.style.overflow="visible";
  70.                 demo1.appendChild(d);
  71.                 //alert(m.innerHTML);
  72.     }
  73. demo.onmouseleave = function(){MyMar = setInterval(Marquee,speed)}
  74. return demo;
  75.     }
  76.     
  77. }

函数参数的imga是你要传入img地址的数组,border是图片的边框属性,margin是图片间的距离,w是外层div的width,h同理,step是计时器执行一次图片移动的步数,speed是计时器的时间间隔.

上面的计时器代码借用了网上的一段代码,不过我自己做了些改进.

下面给出调用代码:

  1. <html>
  2.     <head>
  3.         <title>Untitled Document</title>
  4.     </head>
  5.     <body>
  6.         
  7.         <script src="kongjian.js"></script>
  8.         
  9.         <script>
  10.             var a=sx.activex.dynamicpic.init(["1 (1).jpg","1.jpg","1 (2).jpg","1 (3).jpg"],"2px red solid",5,500,100,2,10);
  11.             document.body.appendChild(a);
  12.         </script>
  13.     </body>
  14. </html>

好了,基本搞定,有什么问题还请多多交流啊!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一年级下册孩子做作业马虎怎么办 一年级孩子做题马虎怎么办 四年级小孩不喜欢数学该怎么办 工作出了大错误怎么办 遇到不讲道理的人怎么办 四岁宝宝爱生闷气怎么办 一岁宝宝没耐心怎么办 孩子挑食 幼儿园老师该怎么办 小孩被惯的无法无天怎么办 高中的儿子不写作业怎么办 儿子总是不写作业怎么办 长鸡眼脚背肿了怎么办 脚上反复长鸡眼怎么办 脚底长鸡眼很痒怎么办 小脚趾上长鸡眼怎么办 6岁宝宝不爱学习怎么办 上班站久了腿肿怎么办 站时间长了腿肿怎么办 孩子做作业老是粗心大意怎么办 高中孩子没学习兴趣怎么办 初三孩子失去学习兴趣怎么办 初二对学习兴趣不大怎么办 脸上痒发红发肿怎么办 孩子作业拖拉爱丢三落四怎么办 腿肌肉按摩肿了怎么办 孩子上一年级成绩差怎么办 小孩脖子拧筋了怎么办 小孩塑料玩具拧不出来怎么办 一年级孩子做数学题粗心怎么办 手和脚有点肿怎么办 手破了之后肿了怎么办 手指肿了有脓怎么办 宝宝手指红肿有脓怎么办 孩子一听做作业就烦气怎么办 虎皮鹦鹉脚瘸了怎么办 虎皮鹦鹉脚受伤了怎么办 虎皮鹦鹉脚流血了怎么办 虎皮鹦鹉被风扇打到脚怎么办 虎皮鹦鹉脚脱臼了怎么办 孩子作业做得慢怎么办 员工给公司造成损失怎么办