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 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
jquery实现页面虚拟键盘特效
Aug 08 Javascript
浅析BootStrap栅格系统
Jun 07 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
Vue2.x通用编辑组件的封装及应用详解
May 28 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
JS实现页面跳转与刷新的方法汇总
Aug 30 Javascript
详解ECMAScript2019/ES10新属性
Dec 06 Javascript
js实现简单商品筛选功能
Feb 02 Javascript
基于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自建函数的详解
2013/06/06 PHP
PHP模拟asp中response类实现方法
2015/08/08 PHP
详解php协程知识点
2018/09/21 PHP
jquery tools之tooltip
2009/07/25 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
在Python的循环体中使用else语句的方法
2015/03/30 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
Python os.access()用法实例
2019/02/18 Python
如何基于Python批量下载音乐
2019/11/11 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
CSS3 实现飘动的云朵动画
2020/12/01 HTML / CSS
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
火车来了教学反思
2014/02/11 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
催款函范本大全
2015/06/24 职场文书
围城读书笔记
2015/06/26 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书