• JS模仿腾讯图片新闻


    仿照腾讯图片新闻的幻灯,功能并不完全一样。最开始打算做这个的时候,突然觉得好像做不来。想想如果一步一步,一个功能一个功能的做应该能搞定。

    我做这个例子的思路是这样的:

      先把需要的html和css代码写好,分三个大div:第一个存 要显示的大图和图片切换按钮第二个存 显示当前第几个图片和图片配的文字内容第三个存 缩略图和缩略图翻页按钮

      隐藏选中时才显示的内容,调制好css样式之后,进行初始化:计算一共多少个图片,并把数字存入显示标签中并给每一个<li>内的<span>存入它的下标数字。

      然后,实现图片和文字切换功能,有两种方式触发:点击大图和点击缩略图。  

       当事件被触发,获取当前图片信息,并修改显示容器的内容:修改大图地址,修改显示当前下标(2/13)修改显示文字

      最后添加滚动事件和透明效果。

      滚动效果有两种触发方式:点击缩略图滚动按钮点击大图左右的图片切换按钮,前者一次移动最多3个缩略图,后者一次移动1个缩略图

    JS技术有限,代码问题肯定还是很多,而且在IE下,慢的和蜗牛一样。。。

    只能说功能实现了,希望大家给点优化意见!感激不尽!代码直接复制下来就可以运行,图片是连接的网络图片。

      1 <!doctype html>
      2 <html>
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      5 
      6 <style>
      7 /*大图*/
      8 .big-pic{1000px;float:left;position:relative;}
      9 .big-pic img{680px;height:400px;float:left;margin-left:160px;}
     10 .pic-left{500px;height:400px;position:absolute;left:0;top:0;z-index:100;cursor:pointer;font-size:24px;line-height:400px;text-align:left;overflow:hidden;text-indent:10000px;}
     11 .pic-left:hover{text-indent:0px;}
     12 .pic-right{500px;height:400px;position:absolute;right:0;top:0;z-index:100;cursor:pointer;font-size:24px;line-height:400px;text-align:right;overflow:hidden;text-indent:10000px;}
     13 .pic-right:hover{text-indent:0px;}
     14 
     15 /*新闻信息内容  和   当前选中图片/一共多少图片*/
     16 .picnew-con{margin-top:20px;1000px;float:left}
     17 .picnew-con p{padding-left:10px;900px;height:50px;display:block;float:left;margin:0;}
     18 .picnew-con span{height:50px;font-size:24px;color:#333333;float:left;}
     19 
     20 /*缩略图*/
     21 .small-pic{1000px;float:left}
     22 .small-box{940px;overflow:hidden;height:100px;float:left;}
     23 .small-con{1000000px;height:100px;float:left}
     24 .small-box ul{margin:0;padding:0;height:100px;float:left}
     25 .small-box ul li{134px;height:100px;float:left;list-style-type:none;}
     26 .small-box ul li span{display:none;}
     27 .small-box ul li p{display:none;}
     28 .small-box ul img{margin-left:4px;margin-top:10px;120px;height:80px;border:3px solid #ccc}
     29 
     30 
     31 .left-btn{28px;height:100px;float:left;font-size:24px;line-height:100px;border:1px solid #ccc;text-decoration:none;}
     32 .left-btn:hover{background:#09F;color:#fff;}
     33 .right-btn{28px;height:100px;float:left;font-size:24px;line-height:100px;border:1px solid #ccc;text-decoration:none;}
     34 .right-btn:hover{background:#09F;color:#fff;}
     35 </style>
     36 
     37 </head>
     38 
     39 
     40 <body>
     41 <div class="big-pic" id="big-pic">
     42     <a class="pic-left" onClick="previous()">〈</a> 
     43     <img src=""/>
     44     <a class="pic-right" onClick="next()">〉</a>
     45 </div>
     46 
     47 <div class="picnew-con" id="picnew-con">
     48     <span></span>
     49     <span></span>
     50     <p></p>
     51 </div>
     52 
     53 <div class="small-pic">
     54     <a href="#" class="left-btn" onClick="goleft(0)">〈</a>
     55     <div class="small-box" id="small-box">
     56         <div class="small-con">
     57             <ul id="ul">
     58                 <li>
     59                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg" /></a>
     60                     <span></span>
     61                     <p>图片新闻1的文字内容</p>
     62                 </li>
     63                   <li>
     64                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" alt="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" /></a>
     65                     <span></span>
     66                     <p>图片新闻2的文字内容</p>
     67                 </li>
     68                   <li>
     69                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg" /></a>
     70                     <span></span>
     71                     <p>图片新闻3的文字内容</p>
     72                 </li>
     73                 <li>
     74                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg" /></a>
     75                     <span></span>
     76                     <p>图片新闻1的文字内容</p>
     77                 </li>
     78                   <li>
     79                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" alt="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" /></a>
     80                     <span></span>
     81                     <p>图片新闻2的文字内容</p>
     82                 </li>
     83                   <li>
     84                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg" /></a>
     85                     <span></span>
     86                     <p>图片新闻3的文字内容</p>
     87                 </li>
     88                 <li>
     89                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg" /></a>
     90                     <span></span>
     91                     <p>图片新闻1的文字内容</p>
     92                 </li>
     93                   <li>
     94                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" alt="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" /></a>
     95                     <span></span>
     96                     <p>图片新闻2的文字内容</p>
     97                 </li>
     98                   <li>
     99                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg" /></a>
    100                     <span></span>
    101                     <p>图片新闻3的文字内容</p>
    102                 </li>
    103                 <li>
    104                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/sylomo-9367181004.jpg" /></a>
    105                     <span></span>
    106                     <p>图片新闻1的文字内容</p>
    107                 </li>
    108                   <li>
    109                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" alt="http://img0.bdstatic.com/img/image/shouye/sywm-9912328258.jpg" /></a>
    110                     <span></span>
    111                     <p>图片新闻2的文字内容</p>
    112                 </li>
    113                   <li>
    114                     <a href="#"><img src="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg"  alt="http://img0.bdstatic.com/img/image/shouye/dmgongqijun.jpg" /></a>
    115                     <span></span>
    116                     <p>图片新闻3的文字内容</p>
    117                 </li>
    118                 
    119             </ul>
    120         </div>
    121     </div>
    122     <a href="#" class="right-btn" onClick="goright(0)">〉</a>
    123 </div>
    124 
    125 
    126 <script language="javascript" type="text/javascript">
    127 var speed = 1;//速度(毫秒)
    128 var space = 2;//每次移动px
    129 var ulWidth = 940;//缩略图显示区域的大小
    130 var gosum = 0;//计数移动了多少px
    131 var ali = 134;//一个缩略图li的标签大小
    132 var litimes = 3;//一次按钮移动3个li
    133 var opac = 0;//透明
    134 
    135 var mark = 0;//指向被选中的缩略图,默认第一张
    136 var lastpic;//最后一张图
    137 
    138 var source = "small-box";//缩略图盒子ID
    139 var source2 = "picnew-con";// 文字内容和下标
    140 var source3 ="big-pic";//大图容器ID
    141 
    142 function getTag(tag,obj){if(obj==null){return document.getElementsByTagName(tag)}else{return obj.getElementsByTagName(tag)}}
    143 function getid(id){return document.getElementById(id)};
    144 //初始化
    145 var id = getid(source);
    146 var id2 = getid(source2);
    147 var id3 = getid(source3);
    148 
    149 var li = getTag("li",id);
    150 
    151 var ul=getid("ul");
    152 
    153 //一共图片数量,赋值后,就不用改了
    154 id2.children[1].innerHTML = "/" + li.length;
    155 lastpic = li.length-1;//最后一张图的下标
    156 
    157 //给每个li标签下的span赋值,css给这些span设置隐藏,选中时调用,赋值显示当前选中第几幅图
    158 for(var i=0;i<li.length;i++){
    159     getTag("span",li[i])[0].innerHTML = i+1;
    160     //点击缩略图
    161     li[i].onclick=function(){
    162         getTag("img",li[mark])[0].style.border="3px solid #ccc";//取消选中背景
    163         mark = parseInt(getTag("span",this)[0].innerHTML)-1;
    164         tochange(mark);
    165     };
    166 }
    167 
    168 //下标默认选中为第一张图,并为选中图设置选中背景
    169 tochange(mark);
    170 
    171 //选中后修改
    172 function tochange(i){
    173     slowout();
    174     id2.children[0].innerHTML =getTag("span",li[i])[0].innerHTML;//赋值显示选中的图片编号    
    175     id2.children[2].innerHTML =getTag("p",li[i])[0].innerHTML;//赋值显示图片的文字
    176     getTag("img",li[mark])[0].style.border="3px solid #409FC0";//为选中图设置选中背景
    177     id3.children[1].src = getTag("img",li[i])[0].alt;//赋值显示大图
    178     slowin();
    179 }
    180 
    181 function next(){//下一个
    182     if(mark==lastpic) return;
    183     getTag("img",li[mark])[0].style.border="3px solid #ccc";//取消选中背景
    184     mark++;
    185     tochange(mark);
    186     goright(1);
    187 }
    188 function previous(){//上一个
    189     if(mark==0) return;
    190     getTag("img",li[mark])[0].style.border="3px solid #ccc";//取消选中背景
    191     mark--;
    192     tochange(mark);
    193     goleft(1);
    194 }
    195 
    196 function goleft(k){//上翻 K为0移动litimes限制的条数;k为1移动一条
    197     if(id.scrollLeft<=0||(gosum>=ali*litimes&&k==0)||(gosum>=ali&&k==1)){gosum=0;return;}
    198     id.scrollLeft-=space;
    199     gosum+=space;
    200     setTimeout('goleft('+k+')',speed)
    201 }
    202 
    203 function goright(k){//下翻     K为0移动litimes限制的条数;k为1移动一条
    204     if(id.scrollLeft>=ul.scrollWidth-ulWidth||(gosum>=ali*litimes&&k==0)||(gosum>=ali&&k==1)){gosum=0;return;}
    205     id.scrollLeft+=space;
    206     gosum+=space;
    207     setTimeout('goright('+k+')',speed);
    208 }
    209 function slowout(){
    210     opac=0;
    211     id3.style.filter="alpha(opacity="+opac+")";//alert(opac);
    212 }
    213 
    214 function slowin(){
    215     if(opac==100){return;};
    216     opac+=10;
    217     if(document.all){
    218         id3.style.filter="alpha(opacity="+opac+")";
    219     }
    220     else {id3.style.opacity=(opac/100);}
    221     setTimeout('slowin()',30);
    222 }
    223 
    224 </script>
    225 </body>
    226 
    227 </html>
  • 相关阅读:
    设计模式(六)Prototype Pattern 原型模式
    设计模式(五)Builder Pattern建造者模式
    Linux安装软件
    日志技术及JUL入门
    IDEA推出新字体,极度舒适
    HDFS的API操作
    Apollo的灰度发布
    Apollo整合SpringBoot开发
    Apollo配置发布原理
    Apollo应用配置
  • 原文地址:https://www.cnblogs.com/1wen/p/3745736.html
Copyright © 2020-2023  润新知