zoukankan      html  css  js  c++  java
  • 关于图片轮播的几种思路

    图片轮播我们经常在众多网站中看到,各种轮播特效在有限的空间上展示了几倍于空间大小的内容,并且有着良好的视觉效果。很多初学js的小伙伴都会拿这个来练习。我也不例外,所以在此分享几个我写轮播图的过程,代码不足之处请多指教哦,相互学习。

    好了,先来说第一种轮播特效:

    就是通过修改每一张图片的透明度,让其每隔一段时间将其中的某一张图片透明度设为1,而其它的设为0,从而实现一种图片轮流播放的效果。

    这种效果的思路比较简单,首先让一组图片绝对定位,让其重叠在一起,然后通过一个函数来控制图片的透明度变化。同时还有一个定时器,不停的除发这个函数,每次改变不同图片的透明度,让其显示。(更简单的效果是直接修改display属性,让该显示的图片display:block,而不显示的设为display:none就可以,只是效果上会差一些,但原理相同)

    首先来看Html结构代码:

    1 <ul id="pictures">
    2     <li><img src=""></li>
    3     <li><img src=""></li>
    4     <li><img src=""></li>
    5     <li><img src=""></li>
    6 </ul>
    View Code

    对其进行样式调整之后,图片都在同一个位置,可以先给第一张图片设置为显示,而其它的图片设为不显示。

    下面来看js的代码:

     1 /*
     2 关于插件的一些说明:
     3 parentID:是指父容器的id,最好是一个无序列表ul的id。
     4 childTag:是父容器里面包裹每一个图片的标签名,在无序列表里可以是li。
     5 使用此插件要想有一个图片透明度渐进改变的效果,要给包裹图片的标签一个样式,如下:
     6 transition: opacity 1s ease-in-out;
     7 可以对这个transition就行相应的修改;
     8 建议使用此插件的Html结构如下:
     9 <ul id="parentId">
    10     <li><img src=""></li>
    11     <li><img src=""></li>
    12     <li><img src=""></li>
    13 </ul>
    14 此时:parentId即为ul的id;
    15       childTag即为li;
    16 */
    17 
    18 var autoPlay=function(parentID,childTag) {
    19     var pictures = document.getElementById(parentID);
    20     var items = pictures.getElementsByTagName(childTag);
    21     var len=items.length;
    22     var index = 0;
    23     showItem();
    24     // 显示一张图片
    25     function showItem() {
    26         // 首先将所有图片透明度设为0
    27         hideItems();
    28         items[index].style.opacity = 1;
    29         // 将要显示的透明度改变让其显示
    30         if (index > len - 2) {
    31             index = 0;
    32         } else {
    33             index++;
    34         }
    35         // 在这里用setTimeout模拟setInterval的效果
    36         setTimeout(showItem, 2500);
    37     }
    38     // 将所有图片透明度设为0
    39     function hideItems() {
    40         for (var i = 0; i < len; i++) {
    41             items[i].style.opacity = 0;
    42         }
    43     }
    44 };
    View Code

    这样调用该插件即可:autoplay.js是我将这个插件保存到本地的一个文件。

    1 <script type="text/javascript" src="./autoplay.js"></script>
    2     <script type="text/javascript">
    3         autoPlay('pictures','li');
    4     </script>
    View Code

     这里面实现的时候结合了css3的transition属性,让代码更简洁,动画效果也更好。关于transition的兼容我代码中并没有加前缀,需要的小伙伴们可以自行加上,这里只演示一个实现过程。

    第二种轮播特效:

    这一种是滑动形式的,通过改变元素的left值让图片呈现左右滚动的效果。

    html结构式这样子的:

    1 <ul id="pictures">
    2             <li><img src=""></li>
    3             <li><img src=""></li>
    4             <li><img src=""></li>
    5             <li><img src=""></li>
    6         </ul>
    View Code

    js插件代码是这样子的:

     1 var autoSlide = function(parentId, childTag) {
     2     var parent = document.getElementById(parentId);
     3     // 这里将元素的position设为relative,这样才可以对left值进行改变,当然也可以设为absolute
     4     parent.style.position = "relative";
     5     var items = parent.getElementsByTagName(childTag);
     6     var width = items[0].offsetWidth;
     7     var index = 0;
     8     function slide() {
     9         if (index > items.length - 2) {
    10             index = 0;
    11         } else {
    12             index++;
    13         }
    14         moveWidth = -width * index;
    15         parent.style.left = moveWidth + "px";
    16         setTimeout(slide, 1500);
    17     }
    18     slide();
    19 };
    View Code

    插件的调用方式和上面第一种的一样,因为原理都差不多,同样结合了css3的动画实现,所以就不赘述原理了。

    还有一种是无缝轮播方式,就个人感觉这种的显示效果最好。

  • 相关阅读:
    Linux指令集
    [日记]贝鲁特煎熬第32天
    2019南京区域赛ABCHJK题解 & KMbfs(O(n^3))板子
    欧拉筛质数以及四大积性数论函数(欧拉函数、莫比乌斯函数、约数个数函数、约数和函数)
    简短的自我介绍
    BSTTreap名次树数组&指针实现板子 Ver1.0
    2019银川区域赛BDFGHIKN题解
    安装vs2010
    SPEmailEventReceiver 之导入附件EXCEL
    为incoming mail绑定事件,SPEmailEventReceiver
  • 原文地址:https://www.cnblogs.com/luxueping/p/5591245.html
Copyright © 2011-2022 走看看