无缝衔接轮播图——原生JS实现

原理就不讲了,太麻烦了,大致原理就是两扇推拉门,始终保持推拉门处于开启-闭合状态,大致就这样吧,原理很简单,只是说实现比较麻烦,一直想要实现这样的效果,奈何水平不够,也没那么多的时间来研究,趁最近有点闲时,就研究了一下,在部分浏览器上面可能存在一定的加载闪烁,下面是效果图(图片为网图,侵权即删):

接下来就是源码了,想要明白原理的就自己看代码吧,注释也不想写了,不想明白原理的可以直接拿来用,其他的特效可以自己看着加,这里只是一个简单的demo,提供一种实现无缝轮播的思路,毕竟transition属性定义了就无法干掉:

HTML

<div class="wrap"><ul class="one"><li class="list"><img src="data:images/1.jpg" alt=""></li><li class="list"><img src="data:images/2.jpg" alt=""></li></ul><ul class="two"><li class="list"><img src="data:images/3.jpg" alt=""></li><li class="list"><img src="data:images/4.jpg" alt=""></li></ul>
</div>
<div class="to-left" onclick="toLeft()"><</div>
<div class="to-right" onclick="toRight()">></div>

CSS

* {padding: 0;margin: 0;
}
ul {list-style: none;
}
img {height: 600px;width: 1200px;
}
.wrap {height: 600px;width: 1200px;overflow: hidden;margin: 50px auto;position: relative;
}
.one, .two {height: 600px;width: 2400px;position: absolute;top: 0;transition: left 1s;
}
.list {float: left;
}
.to-left, .to-right {height: 40px;width: 40px;text-align: center;line-height: 40px;background-color: black;color: white;float: left;margin: 2px 20px;cursor: pointer;
}

JavaScript

var list = document.getElementsByClassName("list");
var one = document.getElementsByClassName("one")[0];
var two = document.getElementsByClassName("two")[0];var status = "right";
var change_flag = 0,changing_flag = false;
var imgs = ["H:/images/1.jpg", "H:/images/2.jpg", "H:/images/3.jpg", "H:/images/4.jpg"];
var img_flag1 = imgs.length - 1, img_flag2 = 0;list[0].getElementsByTagName("img")[0].src = imgs[img_flag1];
list[1].getElementsByTagName("img")[0].src = imgs[(img_flag1 + 1) % imgs.length];
list[2].getElementsByTagName("img")[0].src = imgs[img_flag2];
list[3].getElementsByTagName("img")[0].src = imgs[(img_flag2 + 1) % imgs.length];one.style.opacity = 1;
two.style.opacity = 0;one.style.left = "-1200px";
two.style.left = 0;function toLeft() {if(changing_flag) { return; }toChange("left");changing_flag = true;setTimeout(() => {changing_flag = false;}, 1000);imgLoad(-2);
}function toRight() {if(changing_flag) { return; }changing_flag = true;setTimeout(() => {changing_flag = false;}, 1000);toChange("right");imgLoad(2);
}function toChange(direction) {if(status != direction) {one.style.opacity = two.style.opacity == 0 ? 0 : 1;two.style.opacity = two.style.opacity == 0 ? 1 : 0;change_flag = ++ change_flag % 2;}status = direction;two.style.opacity = one.style.opacity == 0 ? 0 : 1;one.style.opacity = one.style.opacity == 0 ? 1 : 0;two.style.left = one.style.left == "-1200px" ? "-1200px" : 0;one.style.left = one.style.left == "-1200px" ? 0 : "-1200px";
}function imgLoad(num) {list[0].getElementsByTagName("img")[0].src = imgs[img_flag1];list[1].getElementsByTagName("img")[0].src = imgs[(img_flag1 + 1) % imgs.length];list[2].getElementsByTagName("img")[0].src = imgs[img_flag2];list[3].getElementsByTagName("img")[0].src = imgs[(img_flag2 + 1) % imgs.length];if(!change_flag) {img_flag1 = (img_flag1 + imgs.length + num) % imgs.length;}else {img_flag2 = (img_flag2 + imgs.length + num) % imgs.length;}change_flag = ++ change_flag % 2;
}

学习分享,一起成长!以上为小编的经验分享,若存在不当之处,请批评指正!

快乐玩前端:无缝衔接轮播图——原生JS实现相关推荐

  1. 史上最简单的无缝衔接轮播图

    网上有大量关于使用原生js编写轮播图的例子,不得不说,他们的文章很棒,但是我发现一个缺点,就是他们的轮播图组件太过于完整,添加了很多按钮功能,代码量较大.掩盖了轮播图的最基本也是最重要的实现原理,很容 ...

  2. php cms 轮播图,原生JS运动实现轮播图

    原生JS运动实现轮播图 **基本原理:**通过控制包含n张图片的ul的left值来实现图片自动运动的效果,其中列表中li元素的个数为n,第一个li和最后一个li里存放的图片应为同一张图片,当图片运动到 ...

  3. html 无缝拼接,用jQuery写一个无缝衔接轮播图,超精简又详细

    这个在今天之前一直困扰着我,因为之前做毕业设计的时候用到过.但是我觉得网上写的那些实在是太绕太复杂了,所以我只会套用,完全不理解. 由于无聊就自己动手去写,发现其实很简单,反而去参考别人的会把自己绕晕 ...

  4. 原生js 移动端 无缝衔接轮播图

    https://github.com/zhaoyunchong/ApCarousel.git

  5. 原生JS实现PC端无缝滚动轮播图、匀速轮播图、匀速动画

    offset家族的了解 1.offsetHeight:元素的offsetHeight是一种元素CSS高度的衡量标准,包括元素的边框.内边距和元素的水平滚动条(如果存在且渲染的话),不包含:before ...

  6. JS经典案例-无缝滚动轮播图(纯JS)

    滚动轮播图 在JS初级阶段,轮播图是最基础最经典的案例,而相比于渐变轮播图,无缝滚动轮播图又要更难一点.渐变轮播图仅需要使用到点击事件.定时器等,而无缝滚动轮播图则需要考虑到 第一张>最后一张, ...

  7. 前端实例练习 - 轮播图

    轮播图 代码储存在Github 效果预览 初衷:很多人在初学前端的时候都会问,"如何入门前端?" 同为在前端学习道路上,奋力追赶的一员,本人对于目前网络上所能看到的 "入 ...

  8. web前端html图片轮播,如何使用LayUI实现网页轮播图_WEB前端开发,layui,轮播图

    关于html5中自定义属性的介绍_WEB前端开发 html5为我们提供了以[data-]为前缀定义需要的属性即可设置自定义属性,如[ ].本篇文章介绍了使用LayUI实现网页轮播图的方法,具有一定的参 ...

  9. JavaScript+HTML+CSS 无缝滚动轮播图的两种方式

    第一种方式 在轮播图最后添加第一张,一张重复的图片. 点击前一张,到了第一张,将父级oList移动到最后一张(也就是添加的重复的第一张),在进行后续动画. 点击下一张,到了最后一张(也就是添加的重复的 ...

最新文章

  1. 北欧小国的宏大AI实验: 让1%的人口接受人工智能培训
  2. 水下图像处理算法Sea-thru
  3. 安卓代码拉下来编译后怎么运行_支付宝秒开是因为用了方舟编译器?官方回应...
  4. 菜鸟学前端之遍寻名师
  5. 2020-11-4(安卓开发)
  6. 【多态】多态的向下转型
  7. CodeForces - 985F Isomorphic Strings(字符串哈希)
  8. java接口与集合_【总结】Java常用集合接口与集合类
  9. 如何查看mysql数据库的引擎/MySQL数据库引擎详解
  10. PowerShell Format-Table的细节(AutoSize和Wrap参数)
  11. ×××技术漫谈之IPSec(附MPLS)
  12. 基于uFUN开发板的RGB调色板
  13. 一台电脑有线连接路由器另一台无线连接_两个无线路由器怎么实现无线桥接【详细介绍】...
  14. android调用系统的自定义裁剪后得到的图片不清晰,使用MediaStore.EXTRA_OUTPUT获取缓存下的清晰图片...
  15. matlab实现长除法,【网安智库】基于长除法的BCH(15,7)译码算法
  16. 微信小程序背景图片设置问题
  17. K3Cloud不重启IIS修改调试代码
  18. android ndk standalone,Android NDK Standalone Toolchain(中文翻译)
  19. 如何将excel转换成word文档图文教程
  20. ThreadPoolExecutor源码分析

热门文章

  1. 这套人工智能算法书已经出版了3卷,其中卷3深度学习和神经网络最受程序员喜欢
  2. EXCEL 2016:公式与数组公式的差异
  3. 《信息简史》读书笔记
  4. 认证管理(锐捷无线篇)
  5. we learn考试能切屏吗_托福说 | 当留学生必备技能成托福口语真题,这题你能拿满分吗?!...
  6. 17. django分页
  7. Photoshop中图层叠加效果的算法
  8. 宽电压输入电路的设计
  9. js 年 年-月 年-月-日 正则表达式
  10. 图形学的入门课--shader