当前位置: 首页 > Web前端 > JavaScript

css实现画面过渡和边框线动画

时间:2023-03-27 18:34:12 JavaScript

效果预览。在实现转场效果之前,需要了解一下css的clip-path属性。该属性是实现过渡的核心属性。clip-path属性可以通过剪切创建元素的可显示区域。区域内的部分显示,区域外的部分隐藏。也就是说,裁剪后的尺寸不会超过实际尺寸,超出部分会被隐藏,显示实际尺寸。clip-path的属性如下:|属性|说明||---|---||插图()|四个参数,top,right,bottom,left,定义了一个嵌入矩形。||圈子()|定义一个圆,语法:circle(x-axis(size)atx-axiscoordinatey-axiscoordinate);at之后是切割位置,第一个参数是left和right,第二个参数是up和down||椭圆();|定义一个椭圆(使用两个半径和一个中心位置)。语法:ellipse(x-offsety-offsetatx-coordinatey-coordinate)||多边形();|定义多边形(使用SVG填充规则和一组顶点)。四个参数,up,right,down,left,每个位置的第一个参数代表左右偏移量,第二个参数代表上下偏移量||小路();|定义任意形状(使用可选的SVG填充规则和SVG路径定义)。|详见文档:https://developer.mozilla.org/zh-CN/docs/Web/CSS/clip-path这里以circle()属性作为演示。Circle可以定义一个圆(使用半径和A圆心位置),第一个参数是半径,也就是大小,第二个参数是圆心位置,也就是x轴和y轴的坐标。了解了这些之后,就可以开始写转场动画了。首先定义原始显示元素vue.svg。当鼠标移入vue.svg元素时,会显示过渡动画vite.svg,过渡动画(vite.svg)覆盖原动画(vue.svg)。

//js部分//鼠标移入consttouchStatus=ref(false)consttouch=()=>touchStatus.value=true.fillAnimation{width:300px;高度:200px;边界半径:10px;溢出:隐藏;位置:相对;背景色:cadetblue;显示:弹性;证明内容:空间周围;对齐项目:居中;}.clipPathAnimation{宽度:300px;高度:200px;位置:绝对;顶部:0;左:0;显示:弹性;证明内容:周围空间;对齐项目:居中;背景图像:线性gradient(向右,#12c2e9,#c471ed);剪辑路径:圆形(00像素处为0像素);/*初始大小为0,不显示*/}/*鼠标进入触发*/.touch{animation:clipPathAn2sforwards;/*向前保持动画结束时的效果*/}@keyframesclipPathAn{from{clip-path:circle(0pxat00px);}到{剪辑路径:圆(200%at0200px);}/*最后大小变成了200%,超出了实际大小,所以这里显示的还是原来的100%,这里变成200%是因为锚点在最左边,并且100%只能显示原尺寸一半的图片,所以应该写成200%*/}borderanimationclip-path的另一种实现:borderanimationclip-path只会在裁剪区域显示,使用动画动画动态修改clip-path的值,实现元素移动的视觉效果。效果图:实现效果后,在动画上方添加遮罩,遮住不需要的部分,实现边框动画。按钮
.borderLine{width:150px;高度:70px;边距:30px;位置:相对;边界半径:6px;溢出:隐藏;/*内框-覆盖动画不需要的部分*/.borderCenter{position:absolute;顶部:2px;左:2px;宽度:计算(100%-4px-12px);高度:计算(100%-4px-12px);文本对齐:居中;边框:6px纯白色;边界半径:4px;背景色:#fff;z-索引:10;.innerButton{宽度:100%;高度:100%;显示:弹性;对齐项目:居中;证明内容:空间周围;颜色:#fff;边界半径:4px;背景色:#15c0e9;}}&::before,&::after{内容:"";display:inline-block;width:150px;height:70px;position:absolute;background-color:#15c0e9;animation:insetRound3sinline-block;/*从头到尾速度相同的线性动画*/}&::after{animation:insetRound3sinfinite-1.5slinear;/*insetRound动画持续3s,无限循环前进1.5s(负数前进,正数延迟)并匀速播放*/}}@keyframesinsetRound{0%,100%{clip-path:inset(0096%0);/*x轴左上*/}25%{clip-path:inset(00098%);/*x轴上left*/}50%{clip-path:inset(96%000);/*x轴左上角*/}75%{clip-path:inset(098%00);/*x-axistopleft*/}}box-shadowimplementation:borderanimation类似的边框动画效果也可以使用box-shadow.box{box-show:0px0px0px0px#ccc;}box-show有5个参数。第一个参数:控制元素阴影的左右位置第二个参数:控制元素阴影的上下位置元素阴影第三个参数:控制元素阴影的模糊程度第四个参数:控制元素阴影的大小(放大&缩小)第五个参数:设置元素阴影倾斜角度移动位置的颜色阴影显示,只隐藏超出红色边框的部分。按钮.borderShow{width:150px;高度:70px;边距:30px;位置:相对;边界半径:6px;溢出:隐藏;边框:1px纯红色;显示:弹性;证明内容:周围空间;对齐项目:居中;&::before,&::after{内容:'';位置:绝对;顶部:2px;左:2px;宽度:计算(100%-4px-12px);高度:计算(100%-4px-12px);文本对齐:居中;边框:6px纯白色;边界半径:4px;:#fff;动画:showRound3s无限线性;}&::after{动画:showRound3s无限-1.5s线性;/*insetRound动画持续3s,无限循环提前1.5s(负数提前,正数延迟)并匀速播放*/}/*内框*/.borderShowCenter{position:absolute;顶部:8px;左:8px;宽度:计算(100%-4px-12像素);高度:计算(100%-4px-12px);文本对齐:居中;边界半径:4px;显示:弹性;证明内容:空间周围;;背景色:#c073ed;z-指数:10;/*叠加伪元素*/}}@keyframesshowRound{/*box-shadow:x轴y轴模糊缩放颜色;*/0%,100%{框-阴影:0px-66px0px0px#c073ed;/*up*/}25%{box-shadow:146px0px0px0px#c073ed;/*右*/}50%{box-shadow:0px66px0px0px#c073ed;/*向下*/}75%{box-shadow:-146px0px0px0px#c073ed;/*Left*/}}案例源码:https://gitee.com/wang_fan_w/css-diary如果对你有帮助,欢迎点赞收藏转发~