微信小程序rotateZ实现卡片翻转

47 篇文章 8 订阅

1.实现效果

在这里插入图片描述

2.实现原理

css的filte:hue-rotate(deg)
给图像应用色相旋转。"angle"一值设定图像会被调整的色环角度值。值为0deg,则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。

css的transform:rotateZ(deg)
rotateZ(angle) 定义沿着 Z 轴的 3D 旋转。

  • 动态的设置hue-rotate和rotateZ角度,实现页面切换,并改变背景颜色
  • 同时设置图片hue-rotate与父元素的相反,做到不影响子元素的滤镜

3.实现代码

<view class="page" style="filter:hue-rotate({{rotation}}deg)">
  <view class="prev" catchtap="toPrev"></view>
  <view class="next" catchtap="toNext"></view>
  <view class="stage" style="transform:rotateZ({{rotation}}deg)">
    <view wx:for="{{list}}" wx:key="index" class="page-item">
      <image src="https://i.postimg.cc/qRRLS16Q/susu0.jpg" style="filter:hue-rotate({{-rotation}}deg)" />
      <view class="title">测试</view>
      <view style="margin-top:30px">{{item.title}}</view>
    </view>
  </view>
</view>
.page {
  position: relative;
  z-index: 11;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  background-image: linear-gradient(135deg, #ec8845 0%, #c495f3 100%);
  transition: -webkit-filter 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);
  transition: filter 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);
  transition: filter 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955), -webkit-filter 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);
}


.next {
  z-index: 11;
  color: #fff;
  height: 4vh;
  margin-top: -2vh;
  opacity: 0.2;
  position: absolute;
  top: 50%;
  -webkit-transform: scaleX(0.8);
  transform: scaleX(0.8);
  transition: opacity 200ms linear;
  width: 4vh;
  -webkit-transform: rotate(-45deg);
  border: solid #fff;
  border-width: 0 3px 3px 0;
  display: inline-block;
  padding: -1px;
  right: 30px;
}

.prev {
  z-index: 11;
  color: #fff;
  height: 4vh;
  margin-top: -2vh;
  opacity: 0.2;
  position: absolute;
  top: 50%;
  -webkit-transform: scaleX(0.8);
  transform: scaleX(0.8);
  transition: opacity 200ms linear;
  width: 4vh;
  -webkit-transform: rotate(135deg);
  border: solid #fff;
  border-width: 0 3px 3px 0;
  display: inline-block;
  padding: -1px;
  left: 30px;
}

.stage {
  width: 750rpx;
  height: 100vh;
  left: 0;
  position: absolute;
  bottom: 0;
  -webkit-transform-origin: 50% 150%;
  transform-origin: 50% 150%;
  -webkit-transform: translate3d(0, 0, 0);
  transform: translate3d(0, 0, 0);
  transition: -webkit-transform 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);
  transition: transform 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);
  transition: transform 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955), -webkit-transform 500ms cubic-bezier(0.455, 0.03, 0.515, 0.955);

}

.page-item {
  bottom: 0;
  left: 0;
  height: 100%;
  padding: 0 5vh;
  position: absolute;
  text-align: center;
  -webkit-transform-origin: 50% 150%;
  transform-origin: 50% 150%;
  width: 100%;
  color: #fff;
  box-sizing: border-box;
}

.page-item:nth-child(2) {
  -webkit-transform: rotateZ(90deg);
  transform: rotateZ(90deg);
}

.page-item:nth-child(3) {
  -webkit-transform: rotateZ(180deg);
  transform: rotateZ(180deg);
}

.page-item:nth-child(4) {
  -webkit-transform: rotateZ(270deg);
  transform: rotateZ(270deg);
}

.title {
  font-size: 30px;
  text-align: center;
  margin-top: 30px;
}

.page-item image {
  border-radius: 50%;
  width: 50px;
  height: 50px;
  margin-top: 400px;
}
Page({
  data: {
    rotation: 0,
    list: [
      {
        color: "pink",
        title: "welcomwe to susu1",
      },
      {
        color: "pink",
        title: "welcomwe to bbq2",
      },
      {
        color: "pink",
        title: "welcomwe to xx3",
      },
      {
        color: "pink",
        title: "welcomwe to yyy4",
      },
    ]
  },

  ...
  ...

})

4.完整代码,关注公众号 苏苏的bug,更多小程序demo,尽在苏苏的码云如果对你有帮助,欢迎你的star+订阅!

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值