1.实现效果
slide-image.gif2.实现原理
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",
},
]
},
...
...
})
网友评论