文章地址 https://www.cnblogs.com/sandraryan/

原生js实现轮播图。

打开页面图片自动轮播,点击prev next按钮切换到上/下一张图片,点击1-5切换到对应图片。

大概长这样 不用加图片,div就可以实现

css代码:

.wrap {
/* 展示区域样式 */
width: 500px;height: 400px;
box-shadow: 0 0 10px rgba(0,0,0,.5);
display: flex;
overflow: hidden;
position: relative;
}
.swipe {
width: 2500px;
display: flex;
position: absolute;
left:;
/* 给图片变化添加过渡效果,时间不能超过定时器一次的时间,否则会冲突 */
transition: .8s;
}
/* 被轮播的子元素样式 */
.box{
width: 500px;height: 400px;
background-color: rgb(228, 226, 226);
color: #fff;
font-size: 200px;
}
button{
width: 100px;height: 40px;
margin: 10px 5px;
border-radius: 8px;
background-color: rgb(202, 202, 202);
font-size: 22px;
color: white;
}

页面结构:

<!-- 一些按钮 -->
<button class="prev">prev</button>
<button class="next">next</button>
<br>
<button class="btn">one</button>
<button class="btn">two</button>
<button class="btn">three</button>
<button class="btn">four</button>
<button class="btn">five</button>
<!-- 展示区域 -->
<div class="wrap">
<!-- 被轮播的元素父级 -->
<div class="swipe">
<!-- 被轮播的子元素列表 -->
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
<div class="box">box5</div>
</div>
</div>

js代码:

 <script>
// 获取元素
var prev = document.querySelector(".prev");
var next = document.querySelector(".next");
var btns = document.querySelectorAll(".btn");
var swipe = document.querySelector(".swipe"); // 自动播放
// 封装函数
// 判断索引,改变left值的函数
function nextFn(){
index = index == 4 ? 0 : ++index;
// 定位元素left才会生效
swipe.style.left = -index * 500 + "px";
} // 定时器的函数
function autoPlay(){
autoTinmer = setInterval(function(){
// left初始值为0,每张图片的left是图片宽度乘图片数量
// 只有五张图片,能移动的left最大的left是四张图的,index等于4的时候恢复到0,否则index++
nextFn();
},2000);
}
// 页面一刷新就自动播放;
autoPlay();
// 声明当前展示的图片的顺序
var index = -1;
var autoTinmer; // 点击prev next
next.onclick = function(){
// 先停止自动播放 先展示完下一张
clearInterval(autoTinmer);
// 点击next立即展示下一张
nextFn();
//继续自动播放
autoPlay();
}
prev.onclick = function(){
clearInterval(autoTinmer);
// 点击prev立即展示上一张
index = index == 0 ? 4 : --index;
swipe.style.left = -index * 500 + "px";
autoPlay();
}
// 点击对应顺序按钮
// 循环遍历所有1-5的button
for(var j = 0; j < btns.length; j++){
// 每一个btn绑定点击事件
btns[j].onclick = function(){
// 先停止自动播放的定时器
clearInterval(autoTinmer);
// 获取当前按钮在btns中的顺序获取到
// 这里不能用indexOf方法,因为这是一个伪数组,不是一个数组,不能使用数组的方法
// getAttribute获取为标签自定义html属性的值
var i = this.getAttribute("data-i");
// console.log(i);
// 根据这个顺序设置swipe的left值
swipe.style.left = - i * 500 + "px";
// 恢复自动播放的定时器
autoPlay();
}
}
</script>

the end (●ˇ∀ˇ●)

原生js用div实现简单的轮播图的更多相关文章

  1. 告别组件之教你使用原生js和css写移动端轮播图

    在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...

  2. 原生js实现一个简单的轮播图

    想锻炼一下自己的原生js能力可以从写一个轮播图开始,轮播图的运用想必大家都知道吧,好了废话不多说,开始记笔记了,一些需要注意的点,我都在代码中标注了 首先是构造html: <div id=&qu ...

  3. vue.js学习之better-scroll封装的轮播图初始化失败

    vue.js学习之better-scroll封装的轮播图初始化失败 问题一:slider组件初始化失败 原因:页面异步获取数据很慢,导致slider初始化之后,数据还未获取到,导致图片还未加载 解决方 ...

  4. js原生选项卡(自动播放无缝滚动轮播图)二

    今天分享一下自动播放轮播图,自动播放轮播图是在昨天分享的轮播图的基础上添加了定时器,用定时器控制图片的自动切换,函数中首先封装一个方向的自动播放工能的小函数,这个函数中添加定时器,定时器中可以放向右走 ...

  5. 原生JavaScript(js)手把手教你写轮播图插件(banner)

    ---恢复内容开始--- 1.轮播图插件 1.什么是插件: 为已有的程序增加功能 2.插件的特点(为什么要做成一个插件)与注意事项: 1.通用性,可移植性强 2.兼容性:不会对其他代码产生影响 3.创 ...

  6. JS框架_(Bootstrap.js)实现简单的轮播图

    Bootstrap框架中 轮播(Carousel)插件是一种灵活的响应式的向站点添加滑块的方式 轮播图效果: <!DOCTYPE html> <html> <head&g ...

  7. Js封装的动画函数实现轮播图

    ---恢复内容开始--- 效果图说明:当鼠标移到哪一个按钮上的时候会自动跳转到某一张图片上,并且按钮会以高亮显示 项目目录结构 用到的js封装的animate()动画         function ...

  8. <day006>bootstrap的简单学习 + 轮播图

    任务1:bootstrap的简单学习 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta c ...

  9. 最最最简单的轮播图(JQuery)

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

随机推荐

  1. golang学习资料必备

    核心资料库 https://github.com/yangwenmai/learning-golang

  2. 微服务开源生态报告 No.7

    「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...

  3. TextBlock中显示文字和图片,且不会自动换行

    原本TextBlock显示图片是很容易的,即TextBlock.Inlines.Add(UiElement   element):这个方法即可, 但是,会出现如下效果: 我不想要这种效果,所以改了下代 ...

  4. Python结合OpenCV学习资料

    1.sunny2038的专栏  http://blog.csdn.net/sunny2038 作者建立了一个学习系列.讲得非常具体,有非常多的主要的图像处理实例. 2. https://github. ...

  5. [Vue CLI 3] vue inspect 的源码设计实现

    首先,请记住: 它在新版本的脚手架项目里面非常重要 它有什么用呢? inspect internal webpack config 能快速地在控制台看到对应生成的 webpack 配置对象. 首先它是 ...

  6. Sublime Text3安装教程,配置教程,常用插件安装等方法

    前言: sublimeText3的特点: 1.Sublime Text 是一款跨平台代码编辑器,在Linux.OS X和Windows下均可使用. 2.Sublime Text 是可扩展的,并包含大量 ...

  7. 【软件安装】python安装numpy、scipy

    python2.7开发环境,若为python3.4的环境则下载对应的软件 系统为64为windows环境,显然不同于32的环境,更繁琐,所谓的网友教程也不尽人意. 安装numpy 下载地址:http: ...

  8. SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线

    SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线 传统的线性回归模型用的比较多,但有时候变量之间的关系更符合非线性关系,此时使用非线性模型其拟合度会更好,模型预测效果更佳.在非线性关系中 ...

  9. 【51NOD1028】大数乘法 V2

    ╰( ̄▽ ̄)╭ 给出2个大整数A,B,计算A*B的结果. (A,B的长度 <= 100000,A,B >= 0) (⊙ ▽ ⊙) 把大整数A看做一个次数界为lenA的多项式A(x),其中x ...

  10. 【JZOJ3886】【长郡NOIP2014模拟10.22】道路维护

    CCC 最近徆多人投诉说C国的道路破损程度太大,以至亍无法通行 C国的政府徆重视这件事,但是最近财政有点紧,丌可能将所有的道路都进行维护,所以他们决定按照下述方案进行维护 将C国抽象成一个无向图,定义 ...