图片会照常循环播放,当然也可以通过按钮来进行切换,当切出当前的页面时,等到你在回到当前页面时该轮播的图片还是停留在你之前所切出去的的那张图片的状态。

HTML部分:

<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" type="text/css" href="css/slider.css"/>
<script src="js/slider.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="slider slider1" style="height: 100vh;width: 100vw;">
<div class="slider-wrapper">
<div class="slider-slide" style="background-image:url(img/a1.jpg) "></div>
<div class="slider-slide" style="background-image:url(img/a2.jpg) "></div>
<div class="slider-slide" style="background-image:url(img/a3.jpg) "></div>
<div class="slider-slide" style="background-image:url(img/a4.jpg) "></div>
</div>
<!--这个是左右两边的按钮-->

<div class="slide-btn slider-prev"></div>
<div class="slide-btn slider-next"></div>

</div>
<script>
slider('.slider1')
</script>
</body>
</html>

CSS部分:

*{
margin: 0;
padding: 0;
box-sizing: border-box;
}

.slider{
overflow: hidden;
}
.slider .slider-wrapper{
height: 100%;

}
.slider .slider-wrapper .slider-slide{
background-size: cover;
background-position: center top;
height: 100%;
float: left;
}
.slide-btn{
width: 30px;
height: 50px;
position: absolute;
cursor: pointer;
top: 50%;
transform: translateY(-50%);
background-repeat: no-repeat;
}
.slider-prev{
left: 20px;
background-image: url(../img/left.jpg);
}
.slider-next{
right: 20px;
background-image: url(../img/right.jpg);
}

js部分:

function slider(selector){//selector就是一个选择器,接收从dom那边传来的选择器
//保存全局变量
var container
var wrapper
var slides
var index=0
var buttons
var defaluts={
speed:1000,
delay:2000
}
var flag=false
var timer
//初始化轮播图
function init(){
container=document.querySelector(selector)
wrapper=container.querySelector(".slider-wrapper")
slides=container.querySelectorAll(".slider-slide")
buttons=container.querySelectorAll('.slide-btn')
//应该在结尾和开头添加图片
clone()
//设置宽度
setWidth()
//移动wrapper
moveWrapper()
//自动播放
autoplay()
//响应式
resize()
buttons[0].addEventListener('click',function(){
buttonClick('left')
})
buttons[1].addEventListener('click',function(){
buttonClick('right')
})
//检测是否切出当前页面
visibilityChange()
}
function visibilityChange(){
console.log('321',window)
window.addEventListener("visibilityChange",function(){
//当切换回来的时候还是停留在之前切出去的时候的那张图片
if(document.hidden){
clearTimeout(timer)
}else{
clearTimeout(timer)
autoplay()
}
})
}
function buttonClick(direction){
if(!flag){
moveSlide(direction)
clearTimeout(timer)
autoplay()
}
}
//响应式
function resize(){
window.addEventListener("resize",function(){
setWidth()
wrapper.style.transitionDuration='0ms'
moveWrapper()
})
}
//自动播放
function autoplay(){
timer=setTimeout(function(){
moveSlide('left')
autoplay()
},defaluts.delay+defaluts.speed)
}
//播放滑动slider
function moveSlide(direction){
direction=='right' ? index++ : index--
wrapper.style.transitionDuration=defaluts.speed+'ms'
flag=true
setTimeout(function(){
flag=false
},defaluts.speed)
if(index<0 || index>=slides.length){
setTimeout(function(){
if(index<0){
index=slides.length-1
}
if(index>=slides.length){
index=0
}
wrapper.style.transitionDuration='1ms'
moveWrapper()
},defaluts.speed)
}
moveWrapper()
}
//复制图片
function clone(){
//firstElementChild是获取wraper下面的第一个元素
//为true的时候也可以吧孩子里面的孩子给克隆出来,也就是复制出来
var firstElement=wrapper.firstElementChild.cloneNode(true)
var lastElement=wrapper.lastElementChild.cloneNode(true)
wrapper.appendChild(firstElement)//把第一张图片添加到后边
wrapper.insertBefore(lastElement,slides[0])//把最后一张图片插入到第一个位置

}
//设置宽度
function setWidth(){
var wrapperWidth=0
var sliders=container.querySelectorAll(".slider-slide")
for(var i=0;i<sliders.length;i++){
sliders[i].style.width=container.offsetWidth+'px'
wrapperWidth+=sliders[i].offsetWidth
}
wrapper.style.width=wrapperWidth+'px'
}
//移动wrapper
function moveWrapper(){
var px=0
var sliders=container.querySelectorAll('.slider-slide')
for(var i=0;i<=index;i++){
px+=sliders[i].offsetWidth
}
wrapper.style.transform='translate3d(-'+px+'px,0,0)'
}
init()
}

原生的js轮播图的更多相关文章

  1. javascript原生js轮播图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JavaScript的案例(数据校验,js轮播图,页面定时弹窗)

    1.数据校验            步骤            1.确定事件(onsubmit)并绑定一个函数            2.书写这个函数,获取数据,并绑定id            3. ...

  3. 纯js轮播图练习-2,js+css旋转木马层叠轮播

    基于css3的新属性,加上js的操作,让现在js轮播图花样越来越多. 而现在出现的旋转木马层叠轮播的轮播图样式,却是得到了很多人都喜爱和投入使用. 尤其是在各大软件中,频繁的出现在大家的眼里,在web ...

  4. 纯js轮播图练习-1

    偶尔练习,看视频自己学着做个简单的纯JS轮播. 简单的纯js轮播图练习-1. 样子就是上面图片那样,先不管好不好看,主要是学会运用和理解轮播的原理 掌握核心的理论知识和技术的操作,其他的都可以在这个基 ...

  5. JS轮播图(网易云轮播图)

    JS 轮播图 写在前面 最聪明的人是最不愿浪费时间的人.--但丁 实现功能 图片自动切换 鼠标移入停止自动播放,显示按钮 点击按钮,实现前后翻 鼠标移入小圆圈,可以跳转到对应图片 点击左右两侧图片部分 ...

  6. js原生代码实现轮播图案例

    一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...

  7. 原生js轮播图

    //用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...

  8. 用require.js封装原生js轮播图

    index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...

  9. 手把手原生js轮播图

    在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

随机推荐

  1. python-递归,二分查找

    # print(list("胡辣汤")) # lst = ["河南话", "四川话", "东北", "山东&q ...

  2. Unity中UGUI之Canvas属性解读版本一

    Canvas的基本属性 1.Canvas Scaler组件 : Canvas Scaler组件用于设置处于不同组件下Canvas画布中的元素的缩放模式. Ui Scaler Mode : 设置UI的缩 ...

  3. bzoj1238

    题解: 傻逼模拟题 果断的复制了题解(还没有c++题解?) 代码: program p2509; type arr=array[..] of boolean; var tot:longint; s:a ...

  4. java⑾

    1.数组: 01.一组 相同数据类型的集合! 02.数组在内存中会 开辟一串连续的空间来保存数据! ***存储30名学生的姓名! 01.姓名 应该用什么数据类型保存??? String02.难道需要创 ...

  5. 【转】Java迭代:Iterator和Iterable接口

    Java迭代 : Iterator和Iterable接口 从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... ...

  6. SpringBoot + Security实现权限控制

    网上找了好几个,因为各种原因不太行,下面这个亲测可行 参考:https://blog.csdn.net/u012702547/article/details/54319508 基于SpringBoot ...

  7. vue-12-渲染函数 & JSX

    render() Vue.component('anchored-heading', { render: function (createElement) { return createElement ...

  8. DevExpress ASP.NET Core Controls v18.2新功能详解

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Core ...

  9. js replace

    <script type="text/javascript">// replace() 方法执行查找并替换操作,有两个参数,第一个是查找的正则表达式,第二个是callb ...

  10. input默认显示当前时间

    方法一: // 获取当天的年月日 new Date().getFullYear() + '-' + (new Date().getMonth() + 1) + '-' + new Date().get ...