今天让我们再来做一个左右无缝的轮播图吧!

一、准备html代码

html代码也叫结构

<!DOCTYPE html>
<html lang="zh-CN"><head><title></title><meta charset="UTF-8"></head><body>              <div>                                         <!-- 用来做显示窗口的div --><header>                                  <!--都用div的话就不好的区分的--><img src="img/1.jpg" alt=""><img src="img/2.jpg" alt=""><img src="img/3.jpg" alt=""><img src="img/4.jpg" alt=""><img src="img/1.jpg" alt="">      <!--这里把第一张图在最后也放一张--></header><button> > </button><button> < </button>  <!--左右滑动的按钮-->     <ul>                                      <!--这里是用于显示当前的点点--><li></li><li></li><li></li><li></li></ul></div>      </body>
</html>


这是目前的效果姑且还是给你们看看,img是行内块元素是和div是块级元素,区别是行内块是可以设置宽高,也不会单个占一整行,而div是会自己占一整行的,当然也可设置宽高

二、css代码

css代码也叫表现

*{margin:0;padding:0;
}
body{width: 100vw;                       /*设置body的宽度占满屏幕*/height:100vh;display:flex;                       /*居中*/align-items:center;justify-content: center;
}
div{position: relative;width:730px;                       /*这个div是用来显示的最好和图片宽高一样*/height: 454px;border:5px solid orange;}
header{width: 3850px;height: 454px;position: relative;                 /*开启偏移的设置*/
}
button{                                 /*设置button 左右按钮的设置*/width: 35px;height: 35px;border:none;background: rgba(0,0,0,0.7);    position: absolute;color:white;
}
button:last-of-type{                    /*向后的按钮位置*/top:50%;transform: translateY(-50%);
}
button:first-of-type{                   /*向前的按钮位置*/top:50%;right: 0;transform: translateY(-50%);
}
ul{width: 80%;height: 100px;position: absolute;bottom:0;left: 50%;transform: translateX(-50%);
}
li{                                         /*小圆点是通过li的默认样式*/width: 25%;height: 100%;list-style: circle inside;               /*让li的小圆点居中*/ line-height: 160px;float: left;text-align: center;font-size:22px;color:yellow;
}
li:first-of-type{                        /*第一个li默认选中所以为实心圆*/list-style-type: disc;
}

如果你想让li的小圆点居中必须要设置list-style-position:inside和text-align:center意思是小圆点位置为内部然后文本居中,少一个都不行


你现在看到是这样,有黄色边框的是显示区域,我这么做是为了让你们看明白,你想他要是移动要移动谁,怎么移动,当然是显示区域不懂,后面的图片一直滑动不就成了一个滑动轮播图了。

1、小问题
看到没这个图片之间有一点缝隙了没有,明明我没有写margin和padding就算写了我也清除了默认样式啊,原因是img是行内块就是inline-black所以每次结束有一个空格

2、解决方案
我们直接把它改为块就解决问题了display:block

img{position: relative;          /*配合z-index使用*/display: block;              /*解决缝隙问题*/float: left;              /*通过浮动让他们显示为一行*/z-index: -1;                /*下降层级不能遮住按钮*/
}


这就是解决完了的样子,好了开始js代码

三、js代码

js代码也叫行为

window.onload=() => {                             //设置最后加载js代码var header=document.querySelector("header");  //获取对应的元素 var div=document.querySelector("div");        //queryselect是es5新出的和jq的用法一样var buttons=document.querySelectorAll("button");var index=0;                                  //翻滚的页码值var timeout;var lis=document.querySelectorAll("li");      //获取所有的li返回的是一个数组形式buttons[0].onclick=() =>{                     //向前按钮move(++index)}buttons[1].onclick=() =>{                      //向后按钮move(--index)}function move(idx){var offleft,showW;console.log(idx)clearInterval(timeout)timeout = setInterval(function(){               //缓慢移动offleft=header.offsetLeft;                 //总偏移值showW=(-idx*div.clientWidth-offleft)/10    //每次偏移值if(showW>0){                               //把数值向上走showW=Math.ceil(showW)}else{showW=Math.floor(showW)}header.style.left=(offleft+showW)+"px";     }, 30);}
}


就是这样的一个原理

那么如何达到无缝轮播了

if(index>4){                      index=1;                       header.style.left=0+"px";
}else if(index<0){index=3;header.style.left=-lis,length*div.clientWidth+"px";
}

其实这这里有一点视觉上的问题,当页码到达最大值时,我把显示的图片切换为第二张,然后起始值从零开始,切换到最开始是瞬间完成的,我们末尾的一张会有移动的效果,然后瞬间到一开始,我们肉眼无法察觉,所以会有一种移动了的效果。当然页码到最小值时还向前进的话,也是一样的。

四、完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title></title>
<meta charset="UTF-8">
<style>*{margin:0;padding:0;}body{width: 100vw;                       /*设置body的宽度占满屏幕*/height:100vh;display:flex;                       /*居中*/align-items:center;justify-content: center;}div{position: relative;overflow:hidden;                 /*!!!隐藏超出的部分*/min-width: 730px;max-height: 454px;width:730px;                       /*这个div是用来显示的最好和图片宽高一样*/height: 454px;border:2px solid orange;}header{width: 3650px;height: 454px;position: relative;                 /*开启偏移的设置*/left: 0;}button{                                 /*设置button 左右按钮的设置*/width: 35px;height: 35px;border:none;background: rgba(0,0,0,0.7);    position: absolute;color:white;}button:last-of-type{                    /*向后的按钮位置*/top:50%;transform: translateY(-50%);    }button:first-of-type{                   /*向前的按钮位置*/top:50%;right: 0;transform: translateY(-50%);}ul{width: 80%;height: 100px;position: absolute;bottom:0;left: 50%;transform: translateX(-50%);}li{                                         /*小圆点是通过li的默认样式*/width: 25%;height: 100%;list-style-type: circle;list-style-position: inside;               /*让li的小圆点居中*/ line-height: 160px;float: left;text-align: center;font-size:22px;color:yellow;}li:first-of-type{                        /*第一个li默认选中所以为实心圆*/list-style-type: disc;}img{position: relative;display: block;float: left;z-index: -1;width: 730px;height: 454px;}</style>
<script>window.onload=() => {                             //设置最后加载js代码var header=document.querySelector("header");  //获取对应的元素 var div=document.querySelector("div");        //queryselect是es5新出的和jq的用法一样var buttons=document.querySelectorAll("button");var index=0;                                  //翻滚的页码值var timeout;var lis=document.querySelectorAll("li");      //获取所有的li返回的是一个数组形式buttons[0].onclick=() =>{                     //向前按钮move(index++)}buttons[1].onclick=() =>{                      //向后按钮move(index--)}var newtime=setInterval(buttons[0].onclick, 2000);div.onmouseout=() =>{newtime=setInterval(buttons[0].onclick, 2000);}div.onmouseover=()=>{clearInterval(newtime)}for(i in lis){                                  //小圆点点击事件lis[i].index=i                              //记录下标值lis[i].onclick=function(){    circle(this.index)move(this.index)index=this.index// this.style.listStyleType="square"}}function circle(num){if(num==4){num=0;}for(i of lis){i.style.listStyleType="circle"}lis[num].style.listStyleType="disc"}function move(){var offleft,showW;clearInterval(timeout)timeout = setInterval(function(){               //缓慢移动if(index>4){index=1;header.style.left=0+"px";  }else if(index<0){index=3;header.style.left=-(lis.length)*div.clientWidth+"px";  }offleft=header.offsetLeft;                 //总偏移值showW=(-index*div.clientWidth-offleft)/10    //每次偏移值if(showW>0){                               //把数值向上走showW=Math.ceil(showW)}else{showW=Math.floor(showW)}circle(index);offleft=offleft+showWheader.style.left=offleft+"px";     if(showW==0){clearInterval(timeout)}}, 30);}
}
</script>
</head>
<body>
<div>                                         <!-- 用来做显示窗口的div -->
<header>                                  <!--都用div的话就不好的区分的--><img src="img/1.jpg" alt=""><img src="img/2.jpg" alt=""><img src="img/3.jpg" alt=""><img src="img/4.jpg" alt=""><img src="img/1.jpg" alt="">      <!--这里把第一张图在最后也放一张-->
</header>
<button> > </button><button> < </button>  <!--左右滑动的按钮-->
<ul>                                      <!--这里是用于显示当前的点点--><li></li><li></li><li></li><li></li>
</ul>
</div>
</body>
</html>

展开只是为了让你们看的明白,给最大的父容器div 加上一条 overflow:hidden把超出的部分隐藏了就好了

五、总结

其实没有什么难的,只要思路畅通剩下的就只有把他拼接起来了,最核心的地方就在move()这个函数里面,还有一种轮播图,是一种深入浅出的,我讲讲思路,首先还是把html和css代码写的和我上面一样,然后给图片加上就是img 加上 position:absolute让他们爹叠加在一起,最后可以通过z-index或者opacity这个两个属性调整,这样一想深入浅出的那种还容易一点,对不对啊!

js实现左右无缝轮播图相关推荐

  1. 左右无缝轮播html,JS实现左右无缝轮播图代码

    废话不多说了,直接给大家贴代码了. 无缝轮播图: 无缝轮播图 *{margin: 0;padding:0; } ul{list-style: none;} .banner{width: 600px;h ...

  2. vue如何使用原生js写动画效果_原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  3. html怎么引轮播图插件,原生js写一个无缝轮播图插件(支持vue)

    轮播图插件(Broadcast.js) 前言:写这个插件的原因 前段时间准备用vue加上网易云的nodejs接口,模拟网易云音乐移动端.因为想自己写一遍所有的代码以及加固自己的flex布局,所以没有使 ...

  4. 原生JS无缝轮播图(左右切换、导航跟随)

    原生JS无缝轮播图(左右切换.导航图标) 功能: 1.实现轮播图的左右无缝切换 2.实现导航图标的跟随显示.点击切换 3.使用定时器进行无缝轮播 css部分 <style>/* 轮播图容器 ...

  5. javaScript小案例------js实现无缝轮播图效果篇

    原生js书写无缝轮播图 javaScript无缝轮播图思路及源码 无缝轮播图效果 总体思路 下面附上代码: html css animate.js index.js javaScript无缝轮播图思路 ...

  6. JS无缝轮播图(支持点击左右切换,小圆点切换,定时器自动播放)

    HTML代码 <div class="box"><!-- ul就相当于我装图片的盒子 --><ul class="box_ul"& ...

  7. 左右无缝轮播图的实现

    无缝轮播图: <title>无缝轮播图</title><style>*{margin: 0;padding:0; }ul{list-style: none;}.ba ...

  8. jq 实现无缝轮播图

    工作中经常会用到轮播图,这里记载两种轮播图,供大家参考 一.自动播放的无缝轮播图(一张图片占满屏) 首先是HTML, <div class='bannerCon'><ul class ...

  9. jquery实现动态左右无缝轮播图

    JQ代码实现动态无缝轮播图功能 相比之下 运用jquery比js原生代码 书写更为方便 简介 通俗易懂 以下为代码: <!DOCTYPE html> <html><hea ...

最新文章

  1. Vml+Dhtml:制作一个应用渐变颜色效果不错的进度条
  2. Android自定义绘制 绘制基础
  3. [ubuntu]dlna平台搭建(在家里,寝室搭建自己的影音平台)
  4. 魔兽世界怀旧服最新服务器开发时间,怀旧服开70最新消息汇总 魔兽怀旧服TBC开放时间几个阶段?...
  5. eclipse和myeclipse中如何关闭自动补全括号,花括号,双引号等功能
  6. python绘制不带颜色曲线图_Python数据可视化库-Matplotlib——折线图,子图绘制
  7. Linux中修改PATH环境变量(只在当前窗口下生效)
  8. 论文笔记_SLAM_Review_Visual simultaneous localization and mapping: a survey
  9. 甘特图 知乎_哪一款甘特图软件最好用?
  10. el-descriptions引入代码中label不生效问题
  11. 淘宝/天猫、1688、京东按图搜索淘宝商品(拍立淘)API接口
  12. 遇见“不期而遇的美”---中华古法柴烧大师何建国
  13. 【转载】SOP SO SOIC TSSOP SSOP 封装直观比较图
  14. 怎么让win10隐藏任务栏不会在程序有消息时自动弹出
  15. 【开发随记】【提效】工作习惯那些事系列之三——邮件管理
  16. PR curve, AP, mAP, AUC, f1-score ??
  17. sql查询查询半小时内数据的方法
  18. 云笔记的使用感受和选择
  19. 【STM32H7教程】第24章 STM32H7的Cache解读(非常重要)
  20. python判断一个数是否在范围内_检查数字列表是否在某个范围内?

热门文章

  1. grpc入门到精通_gRPC[go语言]大师教程,构建现代化Api和微服务
  2. 注册、登录、退出登录
  3. AI深度学习入门与实战19 语义分割:打造简单高效的人像分割模型
  4. 开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结
  5. TIA Portal面向对象编程入门
  6. Java项目:医院管理系统(java+SSM+layui+maven+mysql)
  7. hadoop的两个推荐下载地址
  8. 【信号与系统】(六)连续系统的时域分析 ——冲激响应与阶跃响应
  9. 超实用的Excel自动排序小技巧,原来这么简单,早点知道就好了!
  10. eNSP 1.3.00.100下载