从微信小程序基础库 2.9.0 开始支持一种更友好的动画创建方式,用于代替旧的 wx.createAnimation 。它具有更好的性能和更可控的接口。
在页面或自定义组件中,当需要进行关键帧动画时,可以使用 this.animate 接口(官方API文档链接地址:https://developers.weixin.qq.com/miniprogram/dev/framework/view/animation.html)
this.animate(selector, keyframes, duration, callback)
参数说明
| 属性 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
| selector | String | - | 是 | 选择器(同 SelectorQuery.select 的选择器格式) |
| keyframes | Array | - | 是 | 关键帧信息 |
| duration | Number | - | 是 | 动画持续时长(毫秒为单位) |
| callback | function | - | 否 | 动画完成后的回调函数 |
实现3D围绕圆心旋转动画
以下只贴部分关键代码:
wxml
<view class="container">
<view class="carousel" id="carousel_id">
<view class="box" wx:for="{{items}}" wx:for-item="item" wx:for-index="index" wx:key="index" style="transform: rotateY({{index * 30}}deg) translateZ({{translateZ}});">
<image src="{{item.pic}}" />
</view>
</view>
</view>
<button type="primary" bindtap="play" style="margin-top: 200rpx;">旋转</button>
wxss
.container {
margin: 5% auto;
width: 70px;
height: 70px;
position: relative;
perspective: 1000px;
-webkit-perspective: 1000px;
}
.carousel {
width: 100%;
height: 100%;
position: absolute;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
/* animation: rotation 10s infinite linear;
-webkit-animation: rotation 10s infinite linear; */
}
.carousel:hover {
animation-play-state: paused;
-webkit-animation-play-state: paused;
}
.carousel view {
display: block;
position: absolute;
width: 70px;
height: 70px;
/* left: 10px; */
top: 10px;
background: #2262E6;
overflow: hidden;
border: solid 2px #07C160;
}
.box image {
filter: grayscale(0);
cursor: pointer;
transition: all 0.3s ease 0s;
width: 100%;
height: 100%;
}
.box image:hover {
filter: grayscale(0);
-webkit-filter: grayscale(0);
transform: scale(1, 1);
-webkit-transform: scale(1, 1);
}
@keyframes rotation {
from {
transform: rotateY(0deg);
}
to {
transform: rotateY(360deg);
}
}
js
Page({
data: {
translateZ: '0px',
items: [
{ "name": "红酒杏鲍菇", "pic": "https://api.jisuapi.com/recipe/upload/20160719/120829_70383.jpg" },
{ "name": "糖醋黄瓜丝", "pic": "https://api.jisuapi.com/recipe/upload/20160719/120712_61817.jpg" },
{ "name": "泰式柠檬蒸鲈鱼", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115500_14721.jpg" },
{ "name": "高升猪蹄", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115444_29920.jpg" },
{ "name": "香辣鸡翅", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115425_38037.jpg" },
{ "name": "凉拌脱骨猪蹄", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115424_58309.jpg" },
{ "name": "酸菜炖猪蹄", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115421_63772.jpg" },
{ "name": "土匪扣肉", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115415_32313.jpg" },
{ "name": "牛仔骨烧土豆", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115414_82369.jpg" },
{ "name": "豌豆玉米虾仁", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115406_21401.jpg" },
{ "name": "西芹百合", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115355_78233.jpg" },
{ "name": "猪骨炖冬瓜", "pic": "https://api.jisuapi.com/recipe/upload/20160719/115330_15534.jpg" }
]
},
onLoad(options) {
const that = this;
wx.getSystemInfo({
success: (res) => {
that.setData({
translateZ: (res.windowWidth / 2 - 20) + 'px'
});
}
});
},
play() {
this.animate('#carousel_id', [
{ ease: 'ease', rotateY: 0 },
{ ease: 'ease', rotateY: 3600 }
], 5000, function () {
console.log('回调成功,旋转结束');
}.bind(this));
}
});
效果如下
小程序动画API之this.animate()实现3D旋转
完整示例请扫描以下微信小程序二维码前往小程序【废话文学间】中#废话编程#之『干饭选择器』体验!

我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h