Javascript幻灯片播放功能实现过程解析


Posted in Javascript onMay 07, 2020

javascript实现幻灯片播放

实现原理

  • step1 设置容器,包含图片、翻页、下标等元素,通过相对定位来布局。
  • step2 将幻灯片变化,需要改变的元素放在一个字容器内,display设为none,并且采取动画来变化。
  • step3设置js函数,将应该播放的元素样式激活,其他的元素仍为未激活状态或者不展示类的隐藏。

代码

html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引入css样式 -->
<link rel="stylesheet" href="style.css" rel="external nofollow" type="text/css">

</head>
<body>
	<!-- 先设置轮播的整体容器 -->
	<div class="slideshow-container">
		<!-- 在设置轮播图片、翻页键、数字文本的容器 -->
		<!-- fade为滑动动画特效 -->
		<div class="mySlides fade">
			<div class="numbertext">1 / 3</div>
			<img src="img/1.jpg" style="width: 100%">
			<div class="text">文本 1</div>
		</div>

		<div class="mySlides fade">
			<div class="numbertext">2 / 3</div>
			<img src="img/2.jpg" style="width: 100%">
			<div class="text">文本 2</div>
		</div>

		<div class="mySlides fade">
			<div class="numbertext">3 / 3</div>
			<img src="img/3.jpg" style="width: 100%">
			<div class="text">文本 3</div>
		</div>
		
		<a class="prev" onclick="plusSlides(-1)">❮</a> 
		<a class="next" onclick="plusSlides(1)">❯</a>
	</div>
	<br>
	<!-- 设置下方按钮 -->
	<div style="text-align: center">
		<span class="dot" onclick="currentSlide(1)"></span>
		<span class="dot" onclick="currentSlide(2)"></span>
		<span class="dot" onclick="currentSlide(3)"></span>
	</div>
  <!-- 引入js文件,注意js文件应该在下方,否则将无法出现错误,个人觉得错误原因应该是元素未加载而去执行js文件导致错误,具体原因还需探究-->
	<script src="show.js" type="text/javascript"></script>
</body>

</html>

css

@charset "UTF-8";
* {box-sizing:border-box}
body {font-family: Verdana,sans-serif;}
.mySlides {
	display:none;
  /*display 为none的含义是不展示元素,但是且不占用空间*/
}
/* 幻灯片容器 */
.slideshow-container {
 max-width: 1000px;
 position: relative;
 margin: auto;
}

/* 下一张 & 上一张 按钮 */
.prev, .next {
 cursor: pointer;
 position: absolute;
 top: 50%;
 width: auto;
 margin-top: -22px;
 padding: 16px;
 color: white;
 font-weight: bold;
 font-size: 18px;
 transition: 0.6s ease;
 border-radius: 0 3px 3px 0;
}

/* 定位 "下一张" 按钮靠右 */
.next {
 right: 0;
 border-radius: 3px 0 0 3px;
}

/* On hover, add a black background color with a little bit see-through */
.prev:hover, .next:hover {
 background-color: rgba(0,0,0,0.8);
}

/* 标题文本 */
.text {
 color: #f2f2f2;
 font-size: 15px;
 padding: 8px 12px;
 position: absolute;
 bottom: 8px;
 width: 100%;
 text-align: center;
}

/* 数字文本 (1/3 等) */
.numbertext {
 color: #f2f2f2;
 font-size: 12px;
 padding: 8px 12px;
 position: absolute;
 top: 0;
}

/* 标记符号 */
.dot {
 cursor:pointer;
 height: 13px;
 width: 13px;
 margin: 0 2px;
 background-color: #bbb;
 border-radius: 50%;
 display: inline-block;
 transition: background-color 0.6s ease;
}

.active, .dot:hover {
 background-color: #717171;
}

/* 淡出动画 */
.fade {
 -webkit-animation-name: fade;
 -webkit-animation-duration: 1.5s;
 animation-name: fade;
 animation-duration: 1.5s;
}

@-webkit-keyframes fade {
 from {opacity: .4} 
 to {opacity: 1}
}

@keyframes fade {
 from {opacity: .4} 
 to {opacity: 1}
}

js

var slideIndex = 1;

function plusSlides(n) {
 showSlides(slideIndex += n);
}

function currentSlide(n) {
 showSlides(slideIndex = n);
}

function showSlides(n) {
 var i;
 var slides = document.getElementsByClassName("mySlides");
 var dots = document.getElementsByClassName("dot");
 if (n > slides.length) {slideIndex = 1} 
 if (n < 1) {slideIndex = slides.length}
 for (i = 0; i < slides.length; i++) {
   slides[i].style.display = "none"; 
 }//class为mySlides下的元素,即不展示项目的图片元素、数字元素和文本元素
 for (i = 0; i < dots.length; i++) {
   dots[i].className = dots[i].className.replace(" active", "");//将激活的下标元素,改为不再展示
 }
 slides[slideIndex-1].style.display = "block";//轮播的元素展示 
 dots[slideIndex-1].className += " active";//轮播图片对应下标样式激活
}
showSlides(slideIndex);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS 访问容器对象
Oct 07 Javascript
Javascript脚本实现静态网页加密实例代码
Nov 05 Javascript
简单分析javascript面向对象与原型
May 21 Javascript
JavaScript实现身份证验证代码
Feb 17 Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
详解如何优雅地在React项目中使用Redux
Dec 28 Javascript
JavaScript数据结构之栈实例用法
Jan 18 Javascript
javascript中call()、apply()的区别
Mar 21 Javascript
如何基于javascript实现贪吃蛇游戏
Feb 09 Javascript
JavaScript WeakMap使用详解
Feb 05 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
基于javascript实现日历功能原理及代码实例
May 07 #Javascript
Vue简单实现原理详解
May 07 #Javascript
angular组件间通讯的实现方法示例
May 07 #Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 #Javascript
Vue双向绑定实现原理与方法详解
May 07 #Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 #Javascript
微信小程序pinker组件使用实现自动相减日期
May 07 #Javascript
You might like
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
PHP的5个安全措施小结
2012/07/17 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python获取网页上图片下载地址的方法
2015/03/11 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
Tensorflow卷积神经网络实例进阶
2018/05/24 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
PyTorch中的拷贝与就地操作详解
2020/12/09 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
DKNY品牌官网:纽约大都会时尚风格
2016/10/20 全球购物
历史学专业个人的自我评价
2013/10/13 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
个人自荐书
2013/12/20 职场文书
最新党员思想汇报
2014/01/01 职场文书
军训 自我鉴定
2014/02/03 职场文书
大学生工作自荐书
2014/06/16 职场文书
2014年文秘工作总结
2014/11/25 职场文书
子女赡养老人协议书
2016/03/23 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电