首先,咱们看一下微信小程序动画怎么实现,我首先想到的是anime.js,但是引入之后用不了,微信小程序内的css也无法做到循环的动态,我就去找官方文档看看有没有相应的方法,哎,还真有

点击这里查看 微信官方文档

简化一下哈:就是这样的

先在js的data里面定义一个动画的值

data: {
    animationData: {},
  },
我这边做的是一个箭头图片的旋转
所以wxml里面得元素是这样的
<image animation="{{animationData}}" src="/img/arrows.png" class="arrow" alt="" bindtap="titleClick"></image>

点击生效嘛,然后js里面就在上边bindtap点击函数里面写

 titleClick: function (e) {

      let animation = wx.createAnimation({
duration: 100,//动画的时间
timingFunction: 'ease',//动画的速度
})
this.animation = animation
animation.rotate(90).step()//动画操作,旋转平移之类的自己看看文档,我这个是旋转的 this.setData({
animationData: animation.export()
}); }

这样就是一个简简单单的动画了

但是我的要求是循环列表出来的是这样的,每个单独有一个动画

点击旋转,然后下面的东西出来,再点击下面东西消失箭头旋转回来

各种百度,查资料

最后想到在吧动画这个属性

animationData由{}对象变成[]数组,然后数组里有很多个{}对象,那这样不就可以改变单独的值了么
首先data里有个数组
 data: {
    animationData: [],
    array: []//列表循环数组
  },
然后在请求之后,循环数组生成一个新的数组,里面都是空对象
var animation = []//
for (let index = 0; index < list.length; index++) {
        animation.push({})
}

//然后给data里的animationData赋值
this.setData({
        animationData: animation
      })

wxml里的代码,简单的一个列表

<view class="list" wx:for="{{array}}" wx:key="id"  wx:for-index="idx" wx:for-item="item">
<view class="title" data-id='{{idx}}' bindtap="titleClick">
<image animation="{{animationData[idx]}}" src="/img/arrows.png" class="arrow" alt="" ></image>
<text>{{item.content}}</text>
</view>
<view class="content">
{{item.content}}
</view>
</view>

data-**是可以记录当前下标,与后面animationData的下标相对应

接下来就是点击的事件了

  titleClick: function (e) {
var index = e.currentTarget.dataset.id
var temp_str = 'animationData[' + index + ']';
//设第一个动画是向下旋转,第二个动画是返回初始状态
//判断鱼当前点击的 animationData相对应的{}是否为空,如果为空就是走第一个动画,不为空走第二个
if (JSON.stringify(this.data.animationData[index]) != "{}") {
let animation = wx.createAnimation({
duration: 100,
timingFunction: 'ease',
})
this.animation = animation
animation.rotate(0).step()
this.setData({
[temp_str]: animation.export()
});//这个是为动画运行赋值,也就是返回初始状态的
this.setData({
[temp_str]: {}
});//这个是动画返回到初始后将这个animationData相对应的对象值清空,下次就会走第一个动画,不要直接清空,没有效果
} else {
let animation = wx.createAnimation({
duration: 100,
timingFunction: 'ease',
})
this.animation = animation
animation.rotate(90).step() this.setData({
[temp_str]: animation.export()
});
}
console.log(this.data.animationData); }

列表下面的显示隐藏我还没开始做,但是那个就比较简单了,后面我也不再讲了,其实这个动画逻辑理通顺了之后也是比较简单的,如果大家有其他更简单的方法也欢迎留言告诉我哦

 
 
 
 
 
 
 

微信小程序循环列表点击每一个单独添加动画的更多相关文章

  1. 微信小程序 循环列表添加点击事件和样式

    如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容,<switch/> 的选中状态),需要使 ...

  2. 微信小程序新闻列表功能(读取文件、template模板使用)

    微信小程序新闻列表功能(读取文件.template) 不忘初心,方得始终.初心易得,始终难守. 在之前的项目基础上进行修改,实现读取文件内容作为新闻内容进行展示. 首先,修改 post.wxml 文件 ...

  3. 微信小程序如何跳转到另一个小程序

    微信小程序如何跳转到另一个小程序,要注意:在app.json文件里也要配置 navigateToMiniProgramAppIdList,如下图: "navigateToMiniProgra ...

  4. 微信小程序新闻网站列表页

    在app.json中可以设置所有文件的头部导航颜色 (是window属性的子属性) 在具体页面可以单独设置该页面的导航颜色 (直接写该属性,不需要写window属性) 查看官方文档,可以看到好多全局属 ...

  5. 第一个微信小程序(实现点击一个按钮弹出toast)

    今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss ...

  6. 微信小程序关于tabbar点击切换数据不刷新问题

    微信小程序中经常遇到的需求就是我提交了一个表单或者进行了一个操作,需要在我的个人中心页面中实时显示出来,但是小程序中的tabbar切换类似于tab切换 并不会进行页面刷新请求 所以总是会造成一些数据更 ...

  7. 微信小程序初见+nodejs服务端 (一个简单的博客)

    推荐网址: 腾讯云快速开发(nodejs前后端):https://developers.weixin.qq.com/miniprogram/dev/qcloud/qcloud.html#%E5%AF% ...

  8. 微信小程序开发(一)创建一个小程序Hello World!

    开发微信小程序并不是很难,网上有很多小程序开发资料,尤其是微信官方的<小程序开发指南>最详细. 下面是我开发小程序的历程: 第一步,请前往https://mp.weixin.qq.com/ ...

  9. 【微信】微信小程序 应用内的页面跳转在添加了tab以后就跳转不成功的问题解决

    在微信小程序中,本来应用页面内绑定在按钮上跳转页面可以成功,但是将页面添加在tab以后就不能实现跳转了 原本代码如下: //事件处理函数 bindViewTap: function() { wx.na ...

随机推荐

  1. Redis 中的 set 和 sorted set 如何使用,源码实现分析

    set 和 sorted set 前言 set 常见命令 set 的使用场景 看下源码实现 insert dict sorted set 常见的命令 使用场景 分析下源码实现 ZADD ZRANGE ...

  2. futter环境安装

    镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 Flutter是谷歌开发的一款开源.免费的基于Dart语言的UI框架,可以快速在IOS和Android上构建高质量的原生应用.它的最大的特点是跨 ...

  3. vue学习过程总结(08) - vue开发报错提示缺少本地文件的包

    vue开发启动过程会报错某个src下自己写的包找不到为安装,原因有两个 1.import的from后面的路径不正确 2.如果开发中用到了scss是也会一直报这个错,这时候可能你没有安装scss加载器, ...

  4. FrameScan-GUI CMS漏洞扫描

    工具简介 FrameScan-GUI是一款python3和Pyqt编写的具有图形化界面的cms漏洞检测框架,是FrameScan的加强版.支持多种检测方式,支持大多数CMS,可以自定义CMS类型及自行 ...

  5. 关于web以及浏览器处理预加载有哪些思考?

    图片等静态资源在使用之前就提前请求资源使用到的时候能从缓存中加载, 提升用户体验页面展示的依赖关系维护

  6. 你如何理解 Spring Boot 中的 Starters?

    Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包.如你想使用 Spring JPA 访问数据库,只 ...

  7. 我们能在 Switch 中使用 String 吗?

    从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法 糖.内部实现在 switch 中使用字符串的 hash code. 30.Java 中的构造器链是什么? ...

  8. spring event

    昨天看到了一遍关于spring event的帖子,觉得很好,就照着敲了一份代码,感觉对spring event有了进一步的认识.帖子链接:https://segmentfault.com/a/1190 ...

  9. 学习openldap01

    Linux 下openldap的详细介绍,搭建,配置管理,备份,案例 Ldap  服务应用指南 兼容(5.X&6.X) 1.1  Ldap 目录服务介绍 1.1.1 什么是目录服务(activ ...

  10. ACM - 动态规划 - P1282 多米诺骨牌

    多米诺骨牌由上下 \(2\) 个方块组成,每个方块中有 \(1 \sim 6\) 个点.现有排成行的上方块中点数之和记为 \(S_1\),下方块中点数之和记为 \(S_2\),它们的差为 \(\lef ...