ts代码
import React, { Component,createRef } from 'react'
import './index.less'
export default class index extends Component {
//滑动盒子
slider = createRef<HTMLDivElement>()
getslider =()=> this.slider.current as HTMLDivElement;
disx: number = 0;
x: number = 0;
startx: number = 0;
endx: number = 0;
iNow: number = 0;
pageview: number = 0;
setDrag(x: number) {
return this.getslider().style.transform = `translatex(${x - this.pageview}px)`
}
componentDidMount() {
this.pageview = document.documentElement.clientWidth;
this.getslider().ontouchstart = this.fnStart.bind(this)
}
fnStart(ev: TouchEvent) {
this.getslider().style.transition = 'none'
this.startx = ev.changedTouches[0].pageX
this.disx = this.startx - this.x;
this.getslider().ontouchmove = this.fnMove.bind(this)
this.getslider().ontouchend = this.fnEnd.bind(this)
return false;
}
fnMove(ev: TouchEvent) {
this.x = ev.changedTouches[0].pageX - this.disx;
this.setDrag(this.x)
}
fnEnd(ev: TouchEvent) {
this.endx = ev.changedTouches[0].pageX;
//如果 手指位置拖动的距离大于50 滑动到下一个页面或上一个页面 否则 返回当前页面
if (Math.abs(this.startx - this.endx) >= 50) {
//如果初始位置大于结束位置 就是向左滑动,否则向右滑动
this.startx > this.endx ? this.leftDrag() : this.rightDrag();
} else {
this.getslider().style.transition = '.3s ease all';
this.x = -this.iNow * this.pageview;
this.getslider().ontransitionend = this.FnOver.bind(this)
this.setDrag(this.x)
}
this.getslider().ontouchend = null;
this.getslider().ontouchmove = null
}
leftDrag() {
this.getslider().style.transition = '.3s ease all';
this.iNow++
//当前的页码
this.x = -this.iNow * this.pageview;
this.setDrag(this.x)
//监听动画结束
this.getslider().ontransitionend = this.FnOver.bind(this)
}
rightDrag() {
this.getslider().style.transition = '.3s ease all';
this.iNow--
this.x = -this.iNow * this.pageview;
this.setDrag(this.x)
//监听动画结束
this.getslider().ontransitionend = this.FnOver.bind(this)
}
FnOver() {
if (this.iNow <= -1) {
this.iNow = 4;
this.getslider().style.transition = 'none';
this.x = -this.iNow * this.pageview;
this.setDrag(this.x);
}
if (this.iNow >= 5) {
this.iNow = 0;
this.getslider().style.transition = 'none';
this.x = -this.iNow * this.pageview;
this.setDrag(this.x);
}
}
render() {
return (
<div className="swiper">
<div className="swipers" ref={this.slider}>
<div className="swipers-item" >4</div>
<div className="swipers-item">0</div>
<div className="swipers-item">1</div>
<div className="swipers-item">2</div>
<div className="swipers-item">3</div>
<div className="swipers-item">4</div>
<div className="swipers-item" >0</div>
</div>
</div>
);
}
}
less代码
.swiper{
width: 750px;
height: 20vh;
background-color: aqua;
overflow: hidden;
position: relative;
.swipers{
width: calc(750px*7);
height: 20vh;
display: flex;
text-align: center;
color: #fff;
line-height: 20vh;
font-size: 50px;
transform: translate3d(-750px, 0px, 0px);
:last-child{
background-color: pink;
}
.swipers-item{
width: 750px;
height: 20vh;
}
.swipers-item:nth-child(1){
background-color: aqua;
}
.swipers-item:nth-child(2){
background-color: pink;
}
.swipers-item:nth-child(3){
background-color: blue;
}
.swipers-item:nth-child(4){
background-color: red;
}
.swipers-item:nth-child(5){
background-color: orange;
}
}
}版权声明:本文为weixin_66127892原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。