js实现移动端轮播图


Posted in Javascript onDecember 21, 2020

本文实例为大家分享了js实现移动端轮播图的具体代码,供大家参考,具体内容如下

这是结构

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, user-scalable=no initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <link rel="stylesheet" href="./css/jd_phnoe.css" >
 <link rel="stylesheet" href="./css/base.css" >
 <title>Document</title>
 
 <script src="./js/jd_phnoe.js"></script>
</head>
<body>
 <div class="jd_layout">
 <div class="jd_banner">
 <ul class="jd_bannerimg clearfix">
 <li>
 <a href="javascript:;" ><img src="./uploads/l1.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l2.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l3.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l4.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l5.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l6.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l7.jpg" alt="" /> </a>
 </li>
 <li>
 <a href="javascript:;" ><img src="./uploads/l8.jpg" alt="" /> </a>
 </li>
 </ul>
 <!-- 点标记 -->
 <ul class="jd_bannerIndicator clearfix">
 <li></li>
 <li class="active"></li>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 </ul>
 </div>
 </div>
</body>
</html>

这是CSS

/* 搜索部分 */
.jd_layout{
 width: 100%;
 max-width: 640px;
 min-width: 320px;
 height: auto;
 margin: 0px auto;
 background-color: #ccc;
}

/* 轮播图部分 */
.jd_banner{
 width: 100%;
 overflow: hidden;
 position: relative;
}
.jd_bannerimg{
 width: 1000%;
 position: relative;
}
.jd_bannerimg > li{
 width: 10%;
 float: left; 
}
.jd_bannerimg>li img{
 width: 100%;
 /*1.设置为块元素
 2.可以将文本的字体大小设置为0
 3.vertical-align:bottom*/
 display: block;
}
/* 点标记 */
.jd_bannerIndicator{
 position: absolute;
 left: 50%;
 bottom: 5px;
 transform: translateX(-50%);
}
.jd_bannerIndicator li{
 width: 6px;
 height: 6px;
 float: left;
 border: 1px solid #fff;
 border-radius: 50%;
 /* opacity: 0.7; */
 margin: 0 3px;
 /* cursor: pointer; */
}
.jd_bannerIndicator li:first-of-type{
 margin-left: 0px;
}
.jd_bannerIndicator >li.active{
 background-color: #fff;
}

dase

/*公共样式*/

/*1.样式重置*/
html,body,ul,li,img,a,p,div,form,input,h3{
 padding: 0;
 margin: 0;
 /*设置盒模型*/
 box-sizing: border-box;
 /*去除移动端特有的点击高亮效果*/
 -webkit-tap-highlight-color: transparent;
}
body{
 font-family: "微软雅黑",sans-serif;
 font-size: 13px;
}
a,
a:hover{
 color: #666;
 text-decoration: none;
}
ul{
 list-style: none;
}
input{
 /*1.清除文本框获取焦点时默认的边框阴影*/
 outline: none;
 /*2.去除边框*/
 border: none;
 /*3.添加边框*/
 border: 1px solid #ccc;
}

/*2.添加新的样式*/
.f_left{
 float: left;
}
.f_right{
 float: right;
}
.m_left10{
 margin-left: 10px;
}
.m_right10{
 margin-right: 10px;
}
.m_top10{
 margin-top: 10px;
}
.clearfix::before,
.clearfix::after{
 content: "";
 display: block;
 height: 0;
 line-height: 0px;
 clear: both;
 visibility: hidden;
}

js

window.onload = function () {
 banner();
}

//轮播图
function banner(){
 /*1.设置修改轮播图的页面结构
 * a.在开始位置添加原始的最后一张图片
 * b.在结束位置添加原始的第一张图片*/
 /*1.1.获取轮播图结构*/
 var banner=document.querySelector(".jd_banner");
 /*1.2.获取图片容器*/
 var imgBox=banner.querySelector("ul:first-of-type");
 //1.3 获取第一张图片
 var first=imgBox.querySelector("li:first-of-type");
 //1.4获取最后一张图
 var last=imgBox.querySelector("li:last-of-type");
 // console.log(first);
 // console.log(last);
 //克隆添加图片
 /*1.5.在首尾插入两张图片 cloneNode:复制一个dom元素*/
 imgBox.appendChild(first.cloneNode(true));
 /*1.6insertBefore(需要插入的dom元素,位置)*/
 imgBox.insertBefore(last.cloneNode(true),imgBox.firstChild);
 //获取对应的样式
 //2.1获取li的位置
 var lis=imgBox.querySelectorAll("li");
 /*2.2 获取li元素的数量*/
 var count=lis.length;
 /*2.3.获取banner的宽度*/
 var bannerWidth=banner.offsetWidth;
 /*2.4 设置图片盒子的宽度*/
 imgBox.style.width=count*bannerWidth+"px";
 /*2.5 设置每一个li(图片)元素的宽度*/
 for(var i=0; i < lis.length;i++){
 lis[i].style.width=bannerWidth+"px";
 }
 /*定义图片索引:图片已经有一个宽度的默认偏移*/
 var index=1;
 /*3.设置默认的偏移*/
 imgBox.style.left=-bannerWidth+"px";
 /*4.当屏幕变化的时候,重新计算宽度*/
 window.onresize=function(){
 bannerWidth=banner.offsetWidth+"px";
 imgBox.style.width=count*bannerWidth+"px";
 for(var i = 0; i < lis.length;i++){
 lis[i].style.width=bannerWidth+"px";
 }
 imgBox.style.left=-index*bannerWidth+"px";
 }
 //自动轮播
 var timerId;
 var strtime=function(){
 timerId=setInterval(function(){
 index++;
 //添加过度效果
 imgBox.style.transition="left 0.5s ease-in-out"
 //设置偏移量
 imgBox.style.left=(-index*bannerWidth)+"px";
 setTimeout(function(){
 //当走到最后一张时候,我就让他等于最后一张
 if(index==count-1){
 index=1;
 // 清除过度效果
 imgBox.style.transition="none";
 /*偏移到指定的位置*/
 imgBox.style.left=(-index*bannerWidth)+"px";
 }
 },500)
 },1500)
 }
 //自动播放调用
 strtime();
 //实现手动轮播
 var startX,moveX,distanceX;
 /*为图片添加触摸事件--触摸开始*/ 
 var isEnd = true; 
 imgBox.addEventListener("touchstart",function(e){
 //停止定时器
 clearInterval(timerId);
 //console.log(e);
 startX=e.targetTouches[0].clientX; 
 });
 //为图片添加触摸过程,滑动图片
 imgBox.addEventListener("touchmove",function(e){
 if(isEnd==true){
 //console.log(123);
 
 /*记录手指在滑动过程中的位置*/
 moveX=e.targetTouches[0].clientX;
 /*计算坐标的差异*/
 distanceX=moveX-startX;
 //清除过度效果
 imgBox.style.transition="none";
 //基于之前轮播图偏移的位置
 imgBox.style.left=(-index*bannerWidth + distanceX)+"px";
 }
 })
 /*添加触摸结束事件*/
 imgBox.addEventListener("touchend",function(e){
 //获取滑动距离,判断是否超过100px
 isEnd=false;
 if(Math.abs(distanceX) > 50){
 //判断滑动方向
 if(distanceX > 0){//上一张
 index--;
 }else{//下一张
 index++;
 }
 //过度效果
 imgBox.style.transition="left 0.5s ease-in-out";
 //偏移位置
 imgBox.style.left=-index*bannerWidth+"px";
 }else if(Math.abs(distanceX) > 0){//回弹效果
 //过度效果
 imgBox.style.transition="left 0.5s ease-in-out";
 //偏移位置
 imgBox.style.left=-index*bannerWidth+"px";
 }
 /*将上一次move所产生的数据重置为0*/
 startX=0;
 moveX=0;
 distanceX=0;
 
 });
 /*webkitTransitionEnd:可以监听当前元素的过渡效果执行完毕,当一个元素的过渡效果执行完毕的时候,会触发这个事件*/
 imgBox.addEventListener("webkitTransitionEnd",function(){
 console.log(index,33333);
 
 /*如果到了最后一张(count-1),回到索引1*/
 /*如果到了第一张(0),回到索引count-2*/
 if(index==count-1){
 index=1;
 imgBox.style.transition="none";
 imgBox.style.left=-index*bannerWidth+"px";
 }else if(index==0){
 index=count-2;
 imgBox.style.transition="none";
 imgBox.style.left=-index*bannerWidth+"px";
 }
 yuandian(index);
 setTimeout(function () {
 isEnd=true;
 clearInterval(timerId);
 strtime();
 },100)
 });

 // //圆点排他
 var yuandian=function (index) {
 //先找到所有的li 进行遍历移除所有样式,为自己加上样式
 var lis=banner.querySelector("ul:last-of-type").querySelectorAll("li");
 for(var i = 0; i < lis.length; i++){
 lis[i].classList.remove("active");
 }
 lis[index-1].classList.add("active");
 }
 

}

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

Javascript 相关文章推荐
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
js实现二级菜单渐隐显示
Nov 03 Javascript
JavaScript常用数组算法小结
Feb 13 Javascript
jQuery自定义插件详解及实例代码
Dec 29 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
vue + element-ui实现简洁的导入导出功能
Dec 22 Javascript
详解自定义ajax支持跨域组件封装
Feb 08 Javascript
vue组件中的数据传递方法
May 14 Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
Feb 18 Javascript
自定义javascript验证框架示例【附源码下载】
May 31 Javascript
小程序实现投票进度条
Nov 20 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 #Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 #Javascript
Echart折线图手柄触发事件示例详解
Dec 16 #Javascript
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 #Javascript
antd Upload 文件上传的示例代码
Dec 14 #Javascript
Vue源码解析之Template转化为AST的实现方法
Dec 14 #Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 #Javascript
You might like
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
php你的验证码安全码?
2007/01/02 PHP
简单的php 验证图片生成函数
2009/05/21 PHP
php类常量的使用详解
2013/06/08 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
2015/12/03 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python字符串替换实例分析
2015/05/11 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
Python检查ping终端的方法
2019/01/26 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
html5定位获取当前位置并在百度地图上显示
2014/08/22 HTML / CSS
遇到的Mysql的面试题
2014/06/29 面试题
本科毕业论文答辩稿
2015/06/23 职场文书
文艺节目主持词
2015/07/06 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers