草庐IT

利用微信小程序新动画API之this.animate()实现3D旋转

one_zen 2023-04-05 原文

从微信小程序基础库 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)

参数说明

属性类型默认值必填说明
selectorString-选择器(同 SelectorQuery.select 的选择器格式)
keyframesArray-关键帧信息
durationNumber-动画持续时长(毫秒为单位)
callbackfunction-动画完成后的回调函数

实现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旋转

完整示例请扫描以下微信小程序二维码前往小程序【废话文学间】中#废话编程#之『干饭选择器』体验!

有关利用微信小程序新动画API之this.animate()实现3D旋转的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  3. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  4. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  5. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  6. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  7. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  8. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

  9. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  10. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用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

随机推荐