列表下拉动画及刷新(微信小程序)

列表下拉动画及刷新(微信小程序)

1.效果描述:下拉、松手、自动还原(一般用于刷新作用)
2.三个事件:

 bindtouchstart 手指按下触发
 bindtouchmove 手指滑动触发(持续性的)
 bindtouchend 松开手指触发

3.案例:
aaa.wxml文件

<view class="daily-song-con" 
bindtouchstart="handlerStart"
bindtouchmove="handlerMove"
bindtouchend="handlerEnd" 
style="transform: {{transform}}; transition:{{coverTransition}}">
</view>

aaa.js文件

import request from '../../utils/request'
let startY = 0;//手指起始位置
let moveY = 0;//手指移动位置
let moveDistance = 0;//手指移动的距离
Page({

    /**
     * 页面的初始数据
     */
    data: {
        topbg:"https://p1.music.126.net/b_xx7JRbTvFOXBQTByS4Yg==/18808245906747912.jpg",
        day:"",
        mouth:"",
        songsList:[],
        transform:"translateY(0)",//滑动的距离(y轴滑动0rpx)
        coverTransition:"",//滑动之后的回弹
        isCover:false//判断是否滑动(false表示滑动)
    },
    handlerStart(event){//当手指按下时触发
        //获取手指真正的起始位置
        startY = event.touches[0].clientY;
        this.setData({
            coverTransition:'',
            isCover:false
        })
    },
    handlerMove(event){//当手指移动时触发
        moveY = event.touches[0].clientY;
        //移动的位置减去起始的位置
        moveDistance = moveY - startY;
        //往上滑动的BUG
        if(moveDistance < 0){
            return;
        }
        //滑动距离过远的BUG
        if(moveDistance >= 100){
            this.setData({
                isCover:true
            })
            return;
        }
        this.setData({
            // 注意这里的``符号
            transform:`translateY(${moveDistance}rpx)`
        })
    },
    handlerEnd(){//松开手指时触发
        this.setData({
            transform:`translateY(0rpx)`,
            // 实现动画显隐
            //三个属性值分别:①变换的属性(指定过渡动画的CSS属性名称,必须是变化的属性);
                            //②动画时间;
                            //③动画执行方式(ease:逐渐慢下来;linear:匀速;ease-in:由慢到快;ease-out:由快到慢;ease-in-out:先慢到快再到慢。)
            coverTransition:'transform 0.7s linear'
        })
        //动画效果执行完成之后再刷新歌单
        setTimeout(async ()=>{
            //判断是否该更新歌单
            if(this.data.isCover){
                let songs = await request("/recommend/songs",{});
                console.log(songs);                 this.setData({
                    songsList:songs.data.dailySongs
                });
            }
        },700); 
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad:async function (options) {
        let songs = await request("/recommend/songs",{});
        console.log(songs); 
        //获取当前时间
        this.setData({
            mouth:new Date().getMonth()+1,//获取当前月份
            day:new Date().getDate(),//获取当前日期
            songsList:songs.data.dailySongs
        });
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值