图片幻灯片是在网页开发中常见的一种效果,几乎是谁处可见。我今天想要实现的幻灯片的效果图如下:

它的html的代码非常的简单:

<div class="img-wrap"><ul><li><img src="./image/aa.webp"/></li><li><img src="./image/bb.jpg"/></li><li><img src="./image/cc.jpg"/></li><li><img src="./image/ee.webp"/></li></ul><div class="nav-dot"><span class="on"></span><span></span><span></span><span></span></div>
</div>

我们实现幻灯片效果的原理很简单,就是通过适当地改变图片容器ul的left值,来达到图片切换的效果
这是它的css代码:

.img-wrap {width: 520px;height: 280px;position: relative;margin: 100px auto 0;border: 1px solid #F00;overflow: hidden; /* 浏览器底部就不会有滚动条了 */
}.img-wrap ul {position: absolute;left: 0;top: 0;margin: 0;padding: 0;
}.img-wrap ul li {list-style: none;float: left;
}.img-wrap ul li img {display: block; /* 消除img的魔鬼间距 */
}.nav-dot {font-size: 0; /* 消除inline-block自带的间距 */position: absolute;left: 50%;bottom: 10px;margin-left: -26px;
}.nav-dot span {display: inline-block;padding-top: 8px; /* 利用padding-top的值代替高度 */width: 8px;height: 0;background: #fff;border-radius: 50%;margin-right: 5px;cursor: pointer;
}.nav-dot span.on {background: #FF5000;
}

因为我们是要用js来改变ul的left值的,所以我们要给ul元素设置一个定位position: absolute。
它的js代码如下:

window.onload = function () {var oUl = document.querySelector('ul');var aLi = oUl.getElementsByTagName('li');var aWidth = aLi[0].offsetWidth;var liLen = aLi.length;oUl.style.width = liLen * aWidth + 'px';var oNavDot = document.querySelector('.nav-dot');var aSpan = oNavDot.querySelectorAll('span');for (var i = 0; i < aSpan.length; i++) {aSpan[i].index = i;}// 事件委托 - 利用事件冒泡机制oNavDot.addEventListener('click', function (e) {var target = e.target || e.srcElement;if (target.tagName == 'SPAN') {oUl.style.left = -aWidth * target.index + 'px';for (var i = 0; i < aSpan.length; i++) {aSpan[i].className = '';}target.className = 'on';}})}

在js代码中,我们运用了一个js的开发技巧——事件委托。事件委托利用了事件冒泡的原理,因为子元素触发的事件会传递(冒泡)到父元素上,所以我们直接把事件处理函数绑定到父元素上,从而不用在每一个子元素上都绑定事件,减少了浏览器的dom操作,提升了页面的性能。
以上的js代码不是模块化的开发方法,现在的web应用越来越复杂了,我们都应该用模块化的思想来写代码了。这里我打算用匿名闭包IIFE模式来改造上面的代码。
IIFE(Immediately-Invoked Function Expression),即立即执行的函数表达式,就是用一个大括号把一个匿名函数包着,然后在这个大括号里放入一个小括号在匿名函数旁边以调用这个匿名函数,最后将这一整块赋值给一个变量。IIFE可以创造一个块级的作用域,最重要的是,它是js中模块化开发的一种模式。
模块化的代码如下:

var slide = (function () {var module = {};var attr = {oUl: document.querySelector('ul'),oNavDot: document.querySelector('.nav-dot')};// 设置包裹图片的ul的宽度方法module.setUlWidth = function () {var aLi = attr['oUl'].getElementsByTagName('li');var aWidth = aLi[0].offsetWidth;var liLen = aLi.length;attr['oUl'].style.width = liLen * aWidth + 'px';};// 设置span的索引值(index)方法module.setIdx = function () {var aSpan = attr['oNavDot'].querySelectorAll('span');for (var i = 0; i < aSpan.length; i++) {aSpan[i].index = i;}};// 滑动方法module.slider = function () {// 事件委托 - 利用事件冒泡机制attr['oNavDot'].addEventListener('click', function (e) {var target = e.target || e.srcElement;if (target.tagName == 'SPAN') {attr['oUl'].style.left = -attr['oUl'].getElementsByTagName('li')[0].offsetWidth * target.index + 'px';for (var i = 0; i < attr['oNavDot'].querySelectorAll('span').length; i++) {attr['oNavDot'].querySelectorAll('span')[i].className = '';}target.className = 'on';}})};return module;
}());window.onload = function () {slide.setUlWidth();slide.setIdx();slide.slider();
}

我们会发现,通过模块化的开发,js实现幻灯片的逻辑更加的清晰了。

原生JS实现图片幻灯片效果相关推荐

  1. JS实现图片幻灯片效果

    代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> &l ...

  2. JS 实现 图片幻灯片 效果。 兼容 FF IE

    <script type="text/javascript"> var focus_width=950;    var focus_height=250;    var ...

  3. html多图轮播淡入淡出js,原生JS实现图片轮播与淡入效果的简单实例

    最近对css的兴趣提不起来,因为以前对图片轮播一直耿耿于怀苦于学艺不精,所以,花了点时间熟悉了一下js.然后一条道走到黑,用jquery和js写了一下轮播和图片淡入的效果.以后学习的路很长,希望自己在 ...

  4. html原生js实现图片轮播,原生JS实现图片轮播切换效果

    原生JS实现图片轮播切换效果 2019-01-06 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了原生JS实现图片轮播切换效果,编程之家小编觉得挺不错的,现在分 ...

  5. 原生JS实现图片跑马灯特效

    今天给大家分享一个用原生JS实现的图片跑马灯特效,效果如下: 实现的代码如下,欢迎大家复制粘贴. <!DOCTYPE html> <html><head><m ...

  6. 如何用原生JS制作图片时钟

    程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 今天分享一个小demo,如何用原生JS制作图片时钟,话不多说上代码. html[外链图片转存失败(img-mD0n42FM-156223 ...

  7. 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...

    js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...

  8. 原生JS实现图片滚动

    2019独角兽企业重金招聘Python工程师标准>>> 原生JS实现图片滚动 一.原理 黑色盒子是最终显示滚动图像的区域,绿色盒子为其子容器,其宽度要大于黑色外层盒子,这样才能通过设 ...

  9. html5 原生拖拽,原生JS实现拖拽效果

    这篇文章主要为大家详细介绍了原生JS实现拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了JS实现拖拽效果的具体代码,供大家参考,具体内容如下 ...

  10. 十分钟教会你原生JS压缩图片,极其精简版

    十分钟教会你原生JS压缩图片,极其精简版 原文链接:https://blog.csdn.net/yasha97/article/details/83629510 (一)实现思路 先通过input标签获 ...

最新文章

  1. 经验|博士毕业,也写一些发文章的心得
  2. GDCM:gdcm::Keywords的测试程序
  3. bash 不是内部或外部命令_Win10_cmd下提示:‘xxx’不是内部或外部命令,也不是可运行的程序 或批处理文件...
  4. pandas 合并所有列_Python学习:Pandas库+练习资料
  5. docker容器启动几分钟之后自动退出
  6. 记录一下Android 长截屏功能
  7. Java必须要掌握的基本问题
  8. STIM-300的那些事
  9. html基础学习笔记
  10. java nc接口开发_OA和NC系统集成接口开发方案.doc
  11. 七牛云和Github如何使用PicGo设置免费图床
  12. tableau无法建立连接_外部服务连接疑难解答 - Tableau
  13. 学习记录 --【零基础CSS学习】03.ID选择器和类选择器
  14. 上班族难懂五险一金 交的越多是否越吃亏
  15. ACM.大一寒假2.15考试
  16. 【JY】知名显式动力学求解器Radioss宣布开源
  17. docx poi 原理_POI读取.doc 和.docx的区别
  18. js分割thymleaf的字符串
  19. redis集群模式详解
  20. 语音控制垃圾分类箱的制作

热门文章

  1. 回调函数—Java实现
  2. doip 源码_汽车DoIP通讯协议的前世今生
  3. Windows下 LaTeX安装教程 TeX Live 2021版
  4. 迅为IMX6ULL开发板Linux下电容触摸屏实验-实验程序编写
  5. 计算机如何取消自动关机,如何取消自动关机命令
  6. 开关电源和家电电源常用电磁兼容(EMC)执行标准
  7. 51单片机学习历程(二)快速入门51单片机
  8. python爬虫淘宝评论_Python爬虫,抓取淘宝商品评论内容
  9. 【电子技术基础(精华版)】整流与滤波电路
  10. android webview 百度地图,Android WebView显示地图