如何使用JS实现一个轮播组件
要求:使用原生JS实现一个轮播组件。
html
.wrapper相当于视口,它的大小为一张图片的大小。
.item-wrapper包裹起所有的图片。
slider - 锐客网
【如何使用JS实现一个轮播组件】
css .item-wrapper利用display:flex将所有的图片排列在一行,之后就可以通过transform移动整个.item-wrapper以达到在视觉上轮播的效果。
*{
box-sizing: border-box;
}
body{
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
}
.wrapper{
width: 200px;
overflow: hidden;
}
.wrapper .item-wrapper{
display: flex;
}
.wrapper .item-wrapper img{
width: 200px;
}
js 声明一个名为Slider的类,Slider可以接收一个名为option的对象,此对象的内容包括:
option{
el,//这是一个dom 元素,表示轮播所插入的位置
slides,//slides也为一个对象,包括属性link(点击图片所跳转的网页),属性image(所显示的图片的地址)
interval//图片切换的时间间隔
}
接收到option对象之后,获得属性slides length(此变量为需要轮播的图片数量)
render()函数,用来将图片渲染到页面上。先设置整个包裹轮播图片的元素宽度,后通过innerHTML将遍历并连接到一起的html放到需要插入的位置。
接着通过start()函数设置定时器,每隔this.$interval/1000s 就调用一次move()函数
class Slider{
constructor(option={}){
this.$el = option.el
this.$slides = option.slides
this.$interval = option.interval || 3000
this.$length = this.$slides.length
this.$index = 0
this.render()
this.start()
}
render(){
this.$el.style.width = `${this.$length*200}px`
this.$el.innerHTML = this.$slides.map(slide=>`
文章图片
`).join('')
}
start(){
setInterval(()=>{
this.move()
},this.$interval)
}
move(){
if(this.$index >= this.$length-1){
this.$index = 0
}else{
this.$index += 1
}
this.$el.style.transform = `translateX(${-this.$index*200}px)`
}
}
实例化Slider类,将所需参数传入。
new Slider({
el: document.querySelector('.item-wrapper'),
slides: [
{link: '#',image: 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3524940950,2350169421&fm=26&gp=0.jpg'},
{link: '#',image: 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2250310412,2079390353&fm=26&gp=0.jpg'},
{link: '#',image: 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1976793582,2211148968&fm=26&gp=0.jpg'},
{link: '#',image: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=490011464,1072548249&fm=26&gp=0.jpg'}
]
})
推荐阅读
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 如何寻找情感问答App的分析切入点
- 【译】20个更有效地使用谷歌搜索的技巧
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 孩子不是实现父母欲望的工具——林哈夫