Taro框架---左滑动删除
index.js
import Taro, { Component } from '@tarojs/taro'
import { View,ScrollView } from '@tarojs/components'
import './index.less'
export default class Index extends Component {
config = {
navigationBarTitleText: '首页'
}
state = {
animation:'',
startX: 0, //开始坐标
startY: 0,
}
componentWillMount () { }
componentDidMount () {
// 页面渲染完成
//实例化一个动画
let animation = Taro.createAnimation({
duration: 400,
timingFunction: 'linear',
delay: 100,
transformOrigin: 'left top 0',
success: function(res) {
console.log(res)
}
})
this.setState({
animation:animation
})
}
// 滑动开始
touchstart(e){
this.setState({
startX: e.changedTouches[0].clientX,
startY: e.changedTouches[0].clientY,
})
}
//滑动事件处理 _index当前索引
touchmove(e) {
var that = this;
var startX = that.state.startX;//开始X坐标
var startY = that.state.startY;//开始Y坐标
var touchMoveX = e.changedTouches[0].clientX;//滑动变化坐标
var touchMoveY = e.changedTouches[0].clientY;//滑动变化坐标
// var isLeft = _class.indexOf("leftMove") != -1; //往左滑的位置
// var isRight = _class.indexOf("rightMove") != -1;//往右滑的位置
//获取滑动角度
var angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });
//滑动超过30度角 return
if (Math.abs(angle) > 30) return;
//右滑
if (touchMoveX > startX){
console.log('右滑');
//实例化一个动画
let _animation = Taro.createAnimation({
duration: 400,
timingFunction: 'linear',
delay: 100,
transformOrigin: 'left top 0',
success: function(res) {
console.log(res)
}
})
_animation.translateX(0).step()
that.setState({
//输出动画
animation: _animation.export()
})
}else if(touchMoveX - startX < -10){//左滑
console.log('左滑');
//实例化一个动画
let _animation = Taro.createAnimation({
duration: 400,
timingFunction: 'linear',
delay: 100,
transformOrigin: 'left top 0',
success: function(res) {
console.log(res)
}
})
_animation.translateX(-80).step()
that.setState({
//输出动画
animation: _animation.export()
})
}
}
/**
* 计算滑动角度
* @param {Object} start 起点坐标
* @param {Object} end 终点坐标
*/
angle(start, end) {
var _X = end.X - start.X,
_Y = end.Y - start.Y
//返回角度 /Math.atan()返回数字的反正切值
return 360 * Math.atan(_Y / _X) / (2 * Math.PI);
}
render () {
return (
<ScrollView className='history' scrollY>
{/* 每一项 */}
<View className='historyItem'>
{/* 删除 */}
<View className='itemDelete right'>删除</View>
{/* 遮盖层 */}
<View className='itemCover' onTouchStart={this.touchstart.bind(this)} onTouchEnd={this.touchmove.bind(this)} animation={this.state.animation}>显示的内容</View>
</View>
</ScrollView>
)
}
}
index.less
// 滑动 .historyItem{ width: 750px; height: 173px; line-height: 173px; position: relative; } .historyItem .itemDelete{ width: 160px; height: 173px; font-size:32px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(255,255,255,1); line-height:173px; text-align: center; background:rgba(246,83,79,1); } .historyItem .right{ float: right; } .historyItem .itemCover{ position: absolute; left: 0; top: 0; width: 750px; height: 173px; background:rgba(255,255,255,1); border-bottom: 1px solid rgba(242,242,242,1); }

浙公网安备 33010602011771号