【写在前面】

最近,在自己的项目中遇到了很多轮播图。

当然,这里的很多,并非数量多,指的是种类很多,即多种实现。

然后我觉得有不少小技巧,就决定写一篇文章讲解一下。

本篇主要内容:

1、轮播图的多种实现( 含动态图 )。

2、效果对比和更好的建议。


【正文开始】

  • 实现一

相当常见且简单的实现方法:

1、将所有的图片并排。

2、依次平移即可。

HMTL 和 CSS部分:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>轮播图</title><style>ul,ol {list-style: none;padding: 0px;margin: 0px;}#main {width: 600px;height: 350px;margin: 30px auto;position: relative;}#display {width: 600px;height: 350px;overflow: hidden;position: relative;-webkit-user-select: none;}#display ul {position: relative;left: 0;top: 0px;width: 3600px;height: 350px;transition: left 500ms linear;}#list li {float: left;width: 600px;height: 350px;}#arrow {display: none;}#arrow span {position: absolute;width: 40px;height: 40px;line-height: 40px;left: 5px;top: 50%;margin-top: -20px;background: #000;cursor: pointer;text-align: center;font-weight: bold;font-family: 黑体, SimHei;font-size: 30px;color: #fff;opacity: 0.4;border: 1px solid #fff;-webkit-user-select: none;}#arrow span:hover {opacity: 0.7;}#arrow #right {right: 5px;left: auto;}#index_container {position: absolute;width: 210px;height: 30px;right: 20px;bottom: 20px;}#index_container .index {float: left;width: 30px;height: 30px;line-height: 30px;text-align: center;opacity: 0.8;background: #fff;border: 1px solid #ccc;margin-left: 10px;cursor: pointer;-webkit-user-select: none;}#index_container .current {background: #ec3d3d;}</style><script></script>
</head>
<body><div id="main"><div id="display"><ul id="list"><li><img src="data:images/0.jpg" width="600" height="350"/></li><li><img src="data:images/1.jpg" width="600" height="350"/></li><li><img src="data:images/2.jpg" width="600" height="350"/></li><li><img src="data:images/3.jpg" width="600" height="350"/></li><li><img src="data:images/4.jpg" width="600" height="350"/></li></ul><ol id="index_container"></ol><div id="arrow"><span id="left" title="前一张"><</span><span id="right" title="后一张">></span></div></div></div>
</body>
</html>

其中 <script> 部分:

window.onload = () => {let list = document.getElementById('list');let ol = document.getElementsByTagName('ol')[0];let display = document.getElementById('display');let currentIndex = 0;let autoPlay = () => {window.autoPlay = true;window.autoPlayTimer = setInterval(() => move((currentIndex + 1) % 5), 2000);}let stopPlay = () => {if (window.autoPlay) {window.autoPlay = false;clearInterval(window.autoPlayTimer);}}//创建索引按钮for (let i = 0; i < 5; i++) {let li = document.createElement('li');li.textContent = String(i + 1);li.className = 'index';if (i == 0) li.className += ' current';li.index = i;ol.appendChild(li);li.addEventListener('mouseover', function() {move(this.index);stopPlay();});}let arrow = document.getElementById('arrow');let showArrow = () => arrow.style.display = 'block';let hideArrow = () => arrow.style.display = 'none';//核心move函数let move = (index) => {let width = display.offsetWidth;for (let i = 0; i < 5; i++) {//改变当前索引按钮if ((index % 5) === i) {ol.children[i].className = 'index current';} else ol.children[i].className = 'index';}//移动listslist.style.left = (-index) * width + 'px';currentIndex = index;}display.addEventListener('mouseover', showArrow)display.addEventListener('mouseleave', () => {hideArrow();if (!window.autoPlay) {//重新开始自动播放autoPlay();}})let left = document.getElementById('left');let right = document.getElementById('right');left.addEventListener('click', () => {move((currentIndex - 1) === -1 ? 4 : currentIndex - 1);stopPlay();});right.addEventListener('click', () => {move((currentIndex + 1) % 5);stopPlay();});//启动自动播放move(0);autoPlay();
}

关键部分为 move() 函数,即平移整个轮播图像列表( 根据跳转索引 index )。

效果如下:

  • 实现二( 代码见结语 ):

1、将所有图片叠在一起。

2、如果为当前图片则设置 ( z-index ),使其在最顶层。

3、使用 opacity 过渡代替方法一中的平移过渡( left ):

效果如下:

  •  实现三:

先来看看去掉 overflow: hidden 后的效果:

1、将所有图像复制一轮后并排。

2、同方法一,依次平移。

3、重要:平移一轮到复制的图像的第一张[ 结束后 ] ,立即将 left 设置为 0px ( 我这里用了 jquery,也可不用 )

效果如下:


【结语】

呼~偷了个懒,实现一和实现二的代码在:GitHub - mengps/Web-jx: 模仿京东首页,纯css3+h5+js+jq

话说这个项目有相当多的小技巧( css3 和 js ),请多多 star 呀..⭐_⭐

最后来总结一下:

实现一:优点是简单,缺点是不够连贯,且首尾没有无缝滚动。

实现二:优点是过渡平滑,相隔几个切换也相当丝滑,缺点是不够好看,视觉效果差了点。

实现三:优点是无缝滚动,也相当丝滑,基本没有什么缺点

轮播图的多种实现及原理相关推荐

  1. 3d轮播图(另一种方式,可以实现的功能更为强大也更为灵活,简单一句话,比酷狗优酷的炫)...

    前不久我做了一个3d仿酷狗的轮播图,用的技术原理就是简单的jquery遍历+css样式读写. 这次呢,我们换一种思路(呵呵其实换汤不换药),看到上次那个轮播吗?你有没有发现用jquery的animat ...

  2. 1.Web前端之CSS3中3D立方体以及3D轮播图

    1.3D坐标系 3D坐标可以用左手来模拟,其中大拇指方向默认是X轴正方向,食指方向是Y轴正方向,中指方向是Z轴正方向.注意:当设置transform:rotateX(90deg)时,相当于将X轴转动9 ...

  3. html怎么做产品轮播图,商品轮播图是什么意思(html轮播图怎么制作)

    但轮播图对用户真的有意义吗?或者它只是设计者用来偷懒,将内容一股脑塞进去的工具呢? 不论将这个问题抛向谁,他们都会告诉你,"轮播图就是个反面模式(anti-pattern)."轮播 ...

  4. jQuery制作漂亮的层叠轮播图

    使用jQuery,HTML5,CSS3制作一个中间顶层最大,两端逐渐变淡.变小的轮播图 先上效果图 实现原理   只需要计算出几个参数,那么各个盒子的大小.位置.透明度这些就都能解决了   1. 整个 ...

  5. html圆形按钮和箭头同时变色,JQuery和html+css实现带小圆点和左右按钮的轮播图

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  6. javascript轮播图(缓冲运动)

    哈喽,大家好呀!我又来咯!相信大家在翻网页的时候都会看到首页的轮播图!今天讲讲实现原理,感觉有用就收藏吧! 轮播图主要是利用缓冲运动来实现图片的切换,这样看起来比较有画面感哈! 那么什么叫做缓冲运动呢 ...

  7. html轮播图原理,30_用js实现一个轮播图效果,简单说下原理

    一.原理 将一些图片在一行中平铺,然后计算偏移量再利用定时器实现定时轮播. 步骤一:建立html基本布局 如下所示: 轮播图 1 2 3 4 5 < > 只有五张图片,却使用7张来轮播,这 ...

  8. JQuery实现轮播图及其原理

    源码: <!DOCTYPE html> <html><head><meta charset="utf-8" name="view ...

  9. viewpager 的工具类,内置多种指示器,能够帮你快速完成,轮播图,app 引导页,viewpager 的 tab 指示器等等

    ViewPagerHelper 项目地址:LillteZheng/ViewPagerHelper  简介:这是一个,viewpager 的工具类,内置多种指示器,能够帮你快速完成,轮播图,app 引导 ...

最新文章

  1. java 路径中文问题_Java 路径问题解决方案汇集
  2. 虚拟机centos7繁忙关不了机的解决方法(转载)
  3. Android应用【世界杯知识答题】的界面设计经验
  4. 实战经验:Oracle Lost Write Detection机制导致Select产生大量Redo
  5. bzoj 3745 [Coci2015]Norma——序列分治
  6. Linux文件目录命令,有这些就够了?
  7. 手把手教你Dojo入门
  8. postgresql 索引使用参考
  9. 博文视点大讲堂35期《Google Android创赢路线与产品开发实战》读者见面会
  10. 数组排序-冒泡排序和选择排序
  11. 2020年美赛C题(数据分析题)O奖论文笔记 (1)
  12. 为什么在wps中调整了0.5倍行距,某一页的行数不会发生变化?
  13. Yolov5(6.1)学习历险记
  14. 解决idea不检查语法错误问题
  15. 深度学习:从2D卷积到3D卷积的简单理解
  16. java-基本HTTP客户端
  17. 各地数据显示上半年28省GDP增幅超全国水平
  18. 给大家推荐几个不错的网站
  19. 2019电赛--OpenMV学习笔记
  20. 甲骨文oracle测试面试记录

热门文章

  1. 人工智能技术为农业发展带来了什么?
  2. layui中的ajax
  3. Makefile是什么东东?有什么用?怎么用?
  4. Linux定时器执行
  5. 【业界首创】攻防演练“杀手锏”!金睛云华HVV超融合一体机震撼登场!
  6. H5移动端完美实现点击复制文本的解决方法,已经自测!
  7. 哪项不是计算机联网检测系统的常见故障,计算机联网检测系统应用研究.docx
  8. Win11怎么添加用户?我们都知道系统一般默认是administraor用户
  9. Python三次样条插值
  10. 配置nginx.conf实现80端口重定向至443(http跳转https)