原生js实现轮播图

我就是我 2022-04-11 12:45 431阅读 0赞

轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。

但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。

对IE 8以下的兼容性不是太好。但相对于浏览器使用情况来说,还是可以的。

下边是css样式:

  1. body{margin: 0;padding: 0;}
  2. img{border: none;vertical-align: middle;}
  3. .banner{width: 500px;height: 181px;overflow: hidden;margin: 100px auto 0;}
  4. .banner-conent a{display: block;text-decoration: none;float: left;}
  5. .banner-conent img{width: 500px;height: 181px;}

复制代码

  1. <div class="banner">
  2. <div class="banner-conent">
  3. <a href="#">
  4. <img src="../image/livehouse@3x.png">
  5. </a>
  6. <a href="#">
  7. <img src="../image/livehouse@3x.png">
  8. </a>
  9. <a href="#">
  10. <img src="../image/livehouse@3x.png">
  11. </a>
  12. </div>
  13. </div>

复制代码

通过transitoinEnd事件对象来实现图片的切换。

复制代码

  1. var itcast={
  2. /*transitoinEnd:事件对象,在 CSS 完成过渡后触发。*/
  3. transitoinEnd:function(dom,fn){
  4. if(dom && typeof dom ==='object'){
  5. dom.addEventListener("webkitTransitionEnd",function(){
  6. fn && fn();
  7. });
  8. dom.addEventListener("transitionEnd",
  9. function() {
  10. fn && fn();
  11. }
  12. )
  13. }
  14. }
  15. }

复制代码

获取元素以及相关变量的声明:

复制代码

  1. var banner = document.querySelector(".banner");/*获取最外层元素*/
  2. var imageBox=banner.querySelector(".banner-conent");/*获取父级元素*/
  3. imageBox.style.width= 3*100+"%"; /*通过子级元素算出父级元素的宽度*/
  4. var w=banner.offsetWidth;
  5. var index=0;
  6. var img_length = 3;
  7. /*添加过滤效果*/
  8. var addTransition=function(){
  9. imageBox.style.transition="all 0.5s";
  10. imageBox.style.webkitTransition="all 0.5s";
  11. };
  12. /*移除效果*/
  13. var removeTransition=function(){
  14. imageBox.style.transition="none";
  15. imageBox.style.webkitTransition="none";
  16. }
  17. /*设置偏移量*/
  18. var addTranslate=function(w){
  19. imageBox.style.transform="translateX("+w+"px)";
  20. imageBox.style.webkitTransform="translateX("+w+"px)";
  21. }

复制代码

开启定时器:

复制代码

  1. /*通过定时器来控制轮播速度*/
  2. var timer=setInterval(function(){
  3. addTransition();
  4. index++;
  5. addTranslate(-index*w);
  6. },3000);

  itcast.transitoinEnd(imageBox,function(){
    if(index<0)\{       index=img\_length;       removeTransition();       addTranslate(-index \* w);     \}     else if(index>=(img_length)){
      index=0;
      removeTransition();
      addTranslate(-index * w);
    }
  });

复制代码

添加左右滑动事件

复制代码

  1. var startX=0;
  2. var moveX=0;
  3. var distinceX=0;
  4. var isMove=false;
  5. /*左右滑动事件*/
  6. imageBox.addEventListener("touchstart",function(event){
  7. clearInterval(timer);
  8. startX=event.touches[0].clientX;
  9. });
  10. imageBox.addEventListener("touchmove",function(event){
  11. isMove=true;
  12. moveX=event.touches[0].clientX;
  13. distinceX=moveX-startX;
  14. var current=(-index*w)+distinceX;
  15. removeTransition();
  16. addTranslate(current);
  17. })
  18. imageBox.addEventListener("touchend",function(){
  19. if(isMove && Math.abs(distinceX)>w/3){
  20. if(distinceX>0){
  21. index--;
  22. }else{
  23. index++;
  24. }
  25. addTransition();
  26. addTranslate(-index*w);
  27. }else{
  28. addTransition();
  29. addTranslate(-index*w);
  30. }
  31. timer=setInterval(function(){
  32. index++;
  33. addTransition();
  34. addTranslate(-index*w);
  35. },3000);
  36. })

复制代码

通过上述代码,你会发现当轮播到最后一张时,会出现一个短暂的空白(BUG),这个时候,只需要再最后多添加一次第一张图片,同时修改父级元素的宽度和img_length即可实现无缝完美轮播!

发表评论

表情:
评论列表 (有 0 条评论,431人围观)

还没有评论,来说两句吧...

相关阅读

    相关 原生js实现

            很多很多网站经常会用到一个特效,那就是轮播图,对于日新月异的前端技术来说其实就是一个框架一个接口的事,但轮播的原理是什么?用最原始的javascript来写又是

    相关 原生js实现

    轮播图基本上是前端所必须面临的一个功能。而且在网上可以找到各种各样的插件或者写法。 但是我个人觉得还是写一下比较好。这里用到的是原生JS、CSS3相结合的写法。 对IE 8

    相关 原生js实现

    原生js实现轮播图  很多网站上都有轮播图,但却很难找到一个系统讲解的,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出。  [