js+html+css实现手动轮播和自动轮播


Posted in Javascript onDecember 30, 2020

本文实例为大家分享了js+html+css实现手动轮播和自动轮播的具体代码,供大家参考,具体内容如下

原理:设置图片层的总长=单张图片长度*张数;在轮播层中利用overflow只留出一张图片的显示; 通过图片层的left来显示轮播的每一张图,第一张为0,为了后面的图片显示,left的值左移为负数。

原理图

js+html+css实现手动轮播和自动轮播

代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>轮播图</title>
<!-- <script type="text/javascript" src="demo.js"></script> -->
</head>
<style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 ul{
 list-style: none;
 }
 a{
    text-decoration: none;
  }
 #container{
 position: relative;
 width: 500px;
 height: 260px;
 margin: 20px auto;
 overflow: hidden; /*溢出隐藏:只显示一张图片*/
 }
 #container .parent{
 position: absolute;
 width: 2500px; /*整个图片层长度:500*5=2500*/
 height: 260px;
 }
 
 #container .parent li{
 float: left;
 width: 500px;
 height: 100%;
 }
 #container .parent li img{
 width: 100%;
 height: 100%;
 }
 #container .btnLeft,
 #container .btnRight{
 width: 30px;
   height: 30px;
   background-color: #9E9E9E;
   border-radius: 20%;
   opacity: 80%;
   position: absolute; /*包含块为图片显示层container*/
   top: 0;
   bottom: 0;
   margin: auto;
   font-size: 20px;
   color: #f40;
   text-align: center;
   line-height: 30px;
 }
 #container .btnLeft{
   left: 10px;
 }
 #container .btnRight{
 right: 10px;
 }
 #container .btnLeft:hover,
 #container .btnRight:hover{
 opacity: 90%;
 cursor: pointer;
 }
 /*蒙层*/
 #container .modal{
 width: 100%;
 height: 40px;
 background: rgba(0,0,0,.3);
 position: absolute;
 left: 0;
 bottom: 0;
 line-height: 40px;
 padding: 0 40px;
 box-sizing: border-box;
 }
 #container .modal .title{
 float: left;
 color: #fff;
 font-size: 12px;
 }
 #container .modal .dots{
 float: right;
 position: absolute;
 bottom: 10px;
 left: 340px;
 }
 #container .modal .dots li{
 width: 15px;
 height: 15px;
 border-radius: 50%;
 float: left;
 /*可以使用行块盒*/
 /*display: inline-block;*/
 margin: 0 5px;
 cursor: pointer;
 }
 .clearfix::after{
 content: "";
 display: block;
 clear: both;
 }
 .on{
 background-color: red;
 }
 .off{
 background-color: gray;
 }
</style>
<body>
<div id="container">
 <ul class="parent" style="left: 0;">
 <li><img src="1.jpg"></li>
 <li><img src="2.jpg"></li>
 <li><img src="3.jpg"></li>
 <li><img src="4.jpg"></li>
 <li><img src="5.jpg"></li>
 </ul>

 <div class="btnLeft"><</div>
 <div class="btnRight">></div>
 <div class="modal">
 <div class="title">
  <h2>轮播图</h2>
 </div>
 <div class="dots">
  <ul class="clearfix">
  <li class="on"></li>
  <li class="off"></li>
  <li class="off"></li>
  <li class="off"></li>
  <li class="off"></li>
  </ul>
 </div>
 </div>
</div>
<script type="text/javascript">
 
var imgShow = document.getElementsByClassName('parent')[0],
 dotList = document.querySelectorAll('.dots >.clearfix > li');
var btnLeft = document.getElementsByClassName('btnLeft')[0],
  btnRight = document.getElementsByClassName('btnRight')[0];
var dotLen = dotList.length,
 index = 0; //轮播层的图片索引,0表示第一张

//圆点显示
function showRadius() {
 for(var i = 0; i < dotLen; i++) {
 if(dotList[i].className === "on"){
  dotList[i].className = "off";
 }
 }
 dotList[index].className = "on";
}

//向左移动
btnLeft.onclick = function() {
 index--;
  if(index < 0){ /*第1张向左时,变为第5张*/
    index = 4;
  }
  showRadius();
 var left;
 var imgLeft = imgShow.style.left;
 if(imgLeft === "0px") { /*当是第1张时,每张图片左移,移4张图,位置为-(4*500)*/
 left = -2000;
 }
 else{
 left = parseInt(imgLeft) + 500; /*由于left为负数,每左移一张加500*/
 }
 imgShow.style.left = left + "px";
}

//向右移动
btnRight.onclick = function() {
 index++;
  if(index > 4){ /*第5张向右时,变为第1张*/
    index = 0;
  }
  showRadius();
 var right;
 var imgLeft = imgShow.style.left;
 if(imgLeft === "-2000px") { /*当是第5张时,第1张的位置为0*/
 right = 0;
 }
 else{
 right = parseInt(imgLeft) - 500; /*由于left为负数,每右移一张减500*/
 }
 imgShow.style.left = right + "px";
}

// 自动轮播
/*var timer;
function autoPlay() {
 timer = setInterval(function() {
 var right;
 var imgLeft = imgShow.style.left;
 if(imgLeft === "-2000px") {
  right = 0;
 }
 else{
  right = parseInt(imgLeft) - 500;
 }
 imgShow.style.left = right + "px";
 } ,1000)
}
autoPlay();*/

for(var i = 0; i < dotLen; i++) {
  /*利用闭包传递索引*/
  (function(i) {
    dotList[i].onclick = function() {
     var dis = index - i; //当前位置和点击的距离
     imgShow.style.left = (parseInt(imgShow.style.left) + dis * 500) + "px";
     index = i; //显示当前位置的圆点
     showRadius();
   }
  })(i);
}

</script>

</body>
</html>

效果:按钮左右滑动图片,图片上的小圆点也可以选择图片。

js+html+css实现手动轮播和自动轮播

js+html+css实现手动轮播和自动轮播

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

Javascript 相关文章推荐
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
javascript实现跨域的方法汇总
Jun 25 Javascript
js计算文本框输入的字符数
Oct 23 Javascript
javascript实现的左右无缝滚动效果
Sep 19 Javascript
基于ajax与msmq技术的消息推送功能实现代码
Dec 26 Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 Javascript
微信小程序商城项目之购物数量加减(3)
Apr 17 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
Vue.js进阶知识点总结
Apr 01 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
微信小程序自定义波浪组件使用方法详解
Sep 21 Javascript
VUE单页面切换动画代码(全网最好的切换效果)
Oct 31 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 #jQuery
vue中实现点击空白区域关闭弹窗的两种方法
Dec 30 #Vue.js
梳理一下vue中的生命周期
Dec 30 #Vue.js
js实现鼠标拖曳效果
Dec 30 #Javascript
微信小程序实现简单购物车功能
Dec 30 #Javascript
微信小程序实现购物车小功能
Dec 30 #Javascript
Vue实现简易购物车页面
Dec 30 #Vue.js
You might like
打造计数器DIY三步曲(下)
2006/10/09 PHP
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
详解在Python和IPython中使用Docker
2015/04/28 Python
使用Python写CUDA程序的方法
2017/03/27 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
安装python及pycharm的教程图解
2019/10/10 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
2020/01/07 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
绘画专业自荐信范文
2014/02/23 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
法院授权委托书格式
2014/09/28 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
个人工作年终总结
2015/03/09 职场文书
简历中自我评价范文
2015/03/11 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python