纵有疾风起
人生不言弃

Taro下拉刷新,上拉加载更多

1、引入插件

import Taro, { Component } from '@tarojs/taro'import { View, Text, ScrollView } from '@tarojs/components'import { AtActivityIndicator } from 'taro-ui'import './index.scss'

2、render (){}

 

render () {let dargStyle = this.state.dargStyle;        let downDragStyle = this.state.downDragStyle;        let upDragStyle = this.state.upDragStyle;        return (<View><View style='width:100%;height:20vh;background:#993;' >aaaaaaaa</View>            <View className='dragUpdataPage'>                <View className='downDragBox' style={downDragStyle}>                    <AtActivityIndicator></AtActivityIndicator>                    <Text className='downText'>{this.state.downText}</Text>                </View>                <ScrollView                    style={dargStyle}                    onTouchMove={this.touchmove}                    onTouchEnd={this.touchEnd}                    onTouchStart={this.touchStart}                    onScrollToUpper={this.ScrollToUpper}                    onScrollToLower={this.ScrollToLower}                    className='dragUpdata'                    scrollY={this.state.scrollY}                    scrollWithAnimation>                    <View style='width:100%;height:60vh;background:pink;' >aaaaaaaa</View>                </ScrollView>                <View className='upDragBox' style={upDragStyle}>                    <AtActivityIndicator></AtActivityIndicator>                    <Text className='downText'>{this.state.pullText}</Text>                </View>            </View></View>        )    }

3、方法  

constructor(props) {        super(props)        this.state = {            dargStyle: {//下拉框的样式                top: 0 + 'px'            },            downDragStyle: {//下拉图标的样式                height: 0 + 'px'            },            downText: '下拉刷新',            upDragStyle: {//上拉图标样式                height: 0 + 'px'            },            pullText: '上拉加载更多',            start_p: {},            scrollY:true,            dargState: 0//刷新状态 0不做操作 1刷新 -1加载更多        }    }    reduction() {//还原初始设置        const time = 0.5;        this.setState({            upDragStyle: {//上拉图标样式                height: 0 + 'px',                transition: `all ${time}s`            },            dargState: 0,            dargStyle: {                top: 0 + 'px',                transition: `all ${time}s`            },            downDragStyle: {                height: 0 + 'px',                transition: `all ${time}s`            },            scrollY:true        })        setTimeout(() => {            this.setState({                dargStyle: {                    top: 0 + 'px',                },                upDragStyle: {//上拉图标样式                    height: 0 + 'px'                },                pullText: '上拉加载更多',                downText: '下拉刷新'            })        }, time * 1000);    }    touchStart(e) {        this.setState({            start_p: e.touches[0]        })    }    touchmove(e) {let that = this        let move_p = e.touches[0],//移动时的位置            deviationX = 0.30,//左右偏移量(超过这个偏移量不执行下拉操作)            deviationY = 70,//拉动长度(低于这个值的时候不执行)            maxY = 100;//拉动的最大高度        let start_x = this.state.start_p.clientX,            start_y = this.state.start_p.clientY,            move_x = move_p.clientX,            move_y = move_p.clientY;        //得到偏移数值        let dev = Math.abs(move_x - start_x) / Math.abs(move_y - start_y);        if (dev < deviationX) {//当偏移数值大于设置的偏移数值时则不执行操作            let pY = Math.abs(move_y - start_y) / 3.5;//拖动倍率(使拖动的时候有粘滞的感觉--试了很多次 这个倍率刚好)if (move_y - start_y > 0) {//下拉操作if (pY >= deviationY) {this.setState({ dargState: 1, downText: '释放刷新' })} else {this.setState({ dargState: 0, downText: '下拉刷新' })}if (pY >= maxY) {pY = maxY}this.setState({dargStyle: {top: pY + 'px',},downDragStyle: {height: pY + 'px'},scrollY:false//拖动的时候禁用})}if (start_y - move_y > 0) {//上拉操作console.log('上拉操作')if (pY >= deviationY) {this.setState({ dargState: -1, pullText: '释放加载更多' })} else {this.setState({ dargState: 0, pullText: '上拉加载更多' })}if (pY >= maxY) {pY = maxY}this.setState({dargStyle: {top: -pY + 'px',},upDragStyle: {height: pY + 'px'},scrollY: false//拖动的时候禁用})}        }    }    pull() {//上拉console.log('上拉')        // this.props.onPull()    }    down() {//下拉console.log('下拉')        // this.props.onDown()    }    ScrollToUpper() { //滚动到顶部事件console.log('滚动到顶部事件')        // this.props.Upper()    }    ScrollToLower() { //滚动到底部事件console.log('滚动到底部事件')        // this.props.Lower()    }    touchEnd(e) {        if (this.state.dargState === 1) {            this.down()        } else if (this.state.dargState === -1) {            this.pull()        }        this.reduction()    }

4、scss  

.dragUpdataPage{height: 50vh;position: relative;overflow: hidden;.downDragBox{    width: 100%;    top: 0px;    display: flex;    overflow: hidden;    justify-content: center;    align-items: center;    font-size: 30px;    position: absolute;}.upDragBox{    bottom: 0px;    width: 100%;    display: flex;    overflow: hidden;    justify-content: center;    align-items: center;    font-size: 30px;    position: absolute;}.dragUpdata{height: 100%;width: 100%;position: absolute;}.downText{margin-left: 20px;}}

  

 

文章转载于:https://www.cnblogs.com/wuliujun521/p/11463361.html

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » Taro下拉刷新,上拉加载更多
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录