原生的js轮播图
图片会照常循环播放,当然也可以通过按钮来进行切换,当切出当前的页面时,等到你在回到当前页面时该轮播的图片还是停留在你之前所切出去的的那张图片的状态。
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轮播图的更多相关文章
- javascript原生js轮播图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript的案例(数据校验,js轮播图,页面定时弹窗)
1.数据校验 步骤 1.确定事件(onsubmit)并绑定一个函数 2.书写这个函数,获取数据,并绑定id 3. ...
- 纯js轮播图练习-2,js+css旋转木马层叠轮播
基于css3的新属性,加上js的操作,让现在js轮播图花样越来越多. 而现在出现的旋转木马层叠轮播的轮播图样式,却是得到了很多人都喜爱和投入使用. 尤其是在各大软件中,频繁的出现在大家的眼里,在web ...
- 纯js轮播图练习-1
偶尔练习,看视频自己学着做个简单的纯JS轮播. 简单的纯js轮播图练习-1. 样子就是上面图片那样,先不管好不好看,主要是学会运用和理解轮播的原理 掌握核心的理论知识和技术的操作,其他的都可以在这个基 ...
- JS轮播图(网易云轮播图)
JS 轮播图 写在前面 最聪明的人是最不愿浪费时间的人.--但丁 实现功能 图片自动切换 鼠标移入停止自动播放,显示按钮 点击按钮,实现前后翻 鼠标移入小圆圈,可以跳转到对应图片 点击左右两侧图片部分 ...
- js原生代码实现轮播图案例
一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...
- 原生js轮播图
//用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...
- 用require.js封装原生js轮播图
index.html页面: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 手把手原生js轮播图
在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...
随机推荐
- 有多个.h引用时,不能有using namespace std
#include<iostream.h> #include<math.h> //using namespace std; 有多个.h引用时,不能有这个,否则无法运行. void ...
- 读书笔记 C#事件event浅析(一)
在C#中,所谓event事件,就是一种特殊的委托.如果要声明事件,首先就要声明一个相对应的委托类型.按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的. //1.先声明委托类型 publ ...
- 6.1 C++ string类型变量的定义以及输入与输出
参考:http://www.weixueyuan.net/view/6389.html 总结: 在C++中提供了一个型的内建数据类型string,该数据类型可以替代C语言中char数组. 与C风格的c ...
- 传统应用迁移到kubernetes(Hadoop YARN)
spark-on-yarn-with-kubernetes 该例子仅用来说明具体的步骤划分和复杂性,在生产环境应用还有待验证,请谨慎使用. 过程中可能用到的概念和术语初步整理如下: 整个迁移过程分为如 ...
- 对称加密-java实现
主要步骤如下: 1.利用SecretKeyFactory.getInstance("加密算法")创建密钥工厂,加密算法如"DES","AES" ...
- easyui 日期控件限制起始相差30天
$('#lendDateStart').datebox('calendar').calendar({ validator: function(date){ var endDateStr = $('#l ...
- freemarker中的null异常处理以及!与??的使用(转)
原文链接: https://blog.csdn.net/mexican_jacky/article/details/50638062 阅读数:6304 如工程包含: 在user中我们有个角色,那么我们 ...
- 九、编写led驱动
led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...
- WebService的一种简单应用方式入门
1.什么是WebService? WebService即Web服务,简单来讲,他就是一种跨编程语言和跨操作平台的远程调用技术. 2.Web服务: Web服务是基于HTTP和XML的技术:HTTP是互联 ...
- mysql增删改查练习
Mysql增删改查sql语句练习 关于数据库的一些操作: 进入mysql 命令行: mysql -uroot –p 查看所有数据库: show databases; 创建数据库: create dat ...