微信小程序> 微信小程序之内容的动画展开与收回

微信小程序之内容的动画展开与收回

浏览量:5213 时间: 来源:今安在

先上效果图:
1.展开状态
小程序

2.显示状态
小程序

3.收回状态
小程序

先说一下实现原理:
1.给列表一个动画效果。
2.使用animotion来创建动画。
3.使列表的高度从0到n开始变化,使用setTimeout做延时处理。
4.收回则与上面相反。
5.animotion的用法请查看官方文档
传送门:https://developers.weixin.qq.com/miniprogram/dev/api/ui/animation/wx.createAnimation.html

下面是wxml代码:

<view class='container'>    <button class='text' bindtap="{{ stopBtn ? 'showContent' : 'hideContent' }}">内容的展开与收回</button>     <view wx:for="{{companyInfo}}" wx:if="{{choose}}" class='companyInfo' wx:for-index="idx" wx:key="0" animation='{{animationData}}'>        <view class='companyInfo-left'>            <text>{{item.company_base}}</text>            <text>{{item.content}}</text>        </view>        <view class='companyInfo-right'>            <button class='small-button' wx:if="{{idx > 1}}" id="{{idx}}" data-set="{{item.content}}" disabled='{{stopBtn}}'>拨打</button>            <button class='small-button' wx:else bindtap='copyToClipboard' id="{{idx}}" data-content="{{item.content}}" disabled='{{stopBtn}}'>复制</button>        </view>    </view></view>

然后是wxss代码:

.container { } .text {  width: 100%;  position: relative;  height: 100rpx;  line-height: 100rpx;  border: 1px solid #ccc;}.companyInfo{    display: flex;    flex-direction: row;    width: 100%;    line-height: 60rpx;    height: 60rpx;    justify-content: space-between;    align-items: center;}.companyInfo-left{    display: flex;    flex-direction: row;    line-height: 60rpx;    height: 60rpx;    font-size: 30rpx;}.companyInfo-right{    display: flex;    align-items: center;    line-height: 60rpx;    height: 60rpx;}.small-button{    font-size: 24rpx;    background: lightgreen;    height: 50rpx;    display: flex;    justify-content: center;    align-items: center;}

最后是js代码:

const app = getApp()Page({  data: {      choose: false,      animationData: {},      stopBtn: true,//动画未执行完之前禁用按钮      companyInfo: [{          company_base: '公司名称:',          content: '某某公司'      }, {          company_base: '公司地址:',          content: '某某地址'      }, {          company_base: '公司电话:',          content: '1234567890'      }, {          company_base: '公司座机:',          content: '987654'      }]  },  onLoad: function () {  },    showContent: function (e) {        // 用that取代this,防止setTimeout内使用this出错        var that = this;        // 创建一个动画实例        var animation = wx.createAnimation({            // 动画持续时间            duration: 500,            // 定义动画效果,当前是匀速            timingFunction: 'linear'        })        // 将该变量赋值给当前动画        that.animation = animation        //用step()完成一个动画, 高度为0,透明度为不可见        animation.height("0").opacity(0).step()        // 用setData改变当前动画        that.setData({            // 通过export()方法导出数据            animationData: animation.export(),            // 改变显示条件            choose: true        })        // 设置setTimeout来改变高度以及透明度,实现有感觉的展开        setTimeout(function () {            animation.height("60rpx").opacity(1).step({ duration: 500 })            that.setData({                animationData: animation.export(),            })        }, 50)        //在动画时间禁用按钮        setTimeout(function () {            that.setData({                stopBtn: false            })        }, 500)    },    // 隐藏    hideContent: function (e) {        var that = this;        var animation = wx.createAnimation({            duration: 500,            timingFunction: 'linear'        })        that.animation = animation        animation.height(0).opacity(0).step({ duration: 500 })        that.setData({            animationData: animation.export()        })        setTimeout(function () {            animation.height("60rpx").step();            that.setData({                animationData: animation.export(),                choose: false,            })        }, 500)        //收回动画开始禁用按钮        that.setData({            stopBtn: true,        })    },})

有什么问题欢迎大家指出,一起学习,一起进步。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎