1.data里面
selectIndex:-1, //选择的子项(-1是未选择)
beforeIndex:-1, //前一个选择
animationDataB:[], //动画数组
2.js
selectToggle:function(e){
var nowIndex=e.currentTarget.dataset.index;//获取当前点击的子项index
//如果点击同一个两次,select变为初设值-1
if(nowIndex==this.data.selectIndex){
this.setData({
selectIndex: -1,
})
} else{
this.setData({
selectIndex: nowIndex,
})
}
//创建动画
var animation = wx.createAnimation({
timingFunction:"ease"
})
this.animation=animation;
if(this.data.selectIndex==-1){
animation.rotate(0).step(); //箭头向上(初始样子)
this.data.animationDataB[nowIndex]=animation.export(); //导出动画队列。
this.setData({
animationDataB: this.data.animationDataB, //重新渲染动画数组
})
}else{
animation.rotate(180).step(); //箭头向下
this.data.animationDataB[nowIndex]=animation.export(); //导出当前选择子项的动画队列
//前一个选择的箭头复原,前后两次点击不是同一个子项,不是第一次点击,beforeIndex还未被赋值
if(this.data.beforeIndex!=nowIndex&&this.data.beforeIndex!==-1){
animation.rotate(0).step();
this.data.animationDataB[this.data.beforeIndex]=animation.export();
}
this.setData({
animationDataB: this.data.animationDataB,
})
}
//记录前一个点击子项的index
this.setData({
beforeIndex:nowIndex
})
},
3.wxml
<view wx:for="{{order.chr}}" wx:key="index" wx:for-item = "item" wx-for:index="index">
<!-- 子项 -->
<view bindtap='selectToggle' data-index="{{index}}">
<view class="flex space-between">
<text>子项名称</text>
<!-- 箭头,动画 -->
<image src="../../img/down.png" class="down-icon" animation="{{animationDataB[index]}}" > </image>
</view>
</view>
<view wx:if="{{selectIndex == index}}" >
隐藏内容(点击之后显示)
</view>
</view>
注:export 方法每次调用后会清掉之前的动画操作。