视图层 wxml
<view id="example-element" bindtap="animationData"> <view class="transition-all" style="" animation="{{animationData}}"> <view class="face front">1</view> <view class="face back">6</view> <view class="face right">2</view> <view class="face left">4</view> <view class="face top">3</view> <view class="face bottom">5</view> </view> </view>
视图层 wxss
#example-element { width: 100px; height: 100px; position: fixed; bottom: 50%; right:50%; } .transition-all { /*perspective: 550px;*/ transform-style: preserve-3d; width: 100%; height: 100%; } .face { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; position: absolute; backface-visibility: inherit; font-size: 60px; color: #fff; border-radius: 20px; } .front { background: rgb(90,90,90); transform: translateZ(50px); } .back { background: rgb(0,210,0); transform: rotateY(180deg) translateZ(50px); } .right { background: rgb(210,0,0); transform: rotateY(90deg) translateZ(50px); } .left { background: rgb(0,0,210); transform: rotateY(-90deg) translateZ(50px); } .top { background: rgb(210,210,0); transform: rotateX(90deg) translateZ(50px); } .bottom { background: rgb(210,0,210); transform: rotateX(-90deg) translateZ(50px); }
js 控制层
通过 wxml 与 wxss 配合可以形成一个3D视图,通过 js 可以控制转动,这里需要使用 rotate3d,小程序 rotate3d 第四参数 <angle> 只支持 deg 角度;
Component({ properties:{ size:{ type:Number, value:100 }, }, data:{ animationData:{} }, attached(){ var animation = wx.createAnimation({ duration:1000, timingFunction:"ease", }) this.animation = animation this.num=1; // animation.scale(2,2).rotate(45).step(); // // this.setData({ // animationData:animation.export() // }) setTimeout(function(){ animation.rotate3d(1,1,-1,360).step(); this.setData({ animationData:animation.export() }) }.bind(this),1000) }, methods:{ animationData(){ let num=this.num++; console.log('animationData',num); //this.num++; this.num=this.num>6?1:this.num; switch (num){ case 1: this.animation.rotate3d(0,1,0,-90).step(); break; case 2: this.animation.rotate3d(1,0,0,-90).step(); break; case 3: this.animation.rotate3d(0,1,0,90).step(); break; case 4: this.animation.rotate3d(1,0,0,90).step(); break; case 5: this.animation.rotate3d(1,0,0,180).step(); break; } //this.animation.rotate3d(1,1,-1,180).step(); this.setData({ animationData:this.animation.export() }) }, } })
标准h5 <angle>支持unit (deg
, rad
, grad
, turn
),具体如下
https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/rotate3d
打赏
微信扫一扫,打赏作者吧~