vue自定义指令两种方式,利用Vue自定义指令让你的开发变得更优雅
前段时间在用框架开发H5页面时,碰到框架中的组件内置了一个属性用于适配异形屏,虽然是组件内部实现的,但这个方式让我萌生一个想法:能不能自己写一个属性来实现这样的功能?经过一番思索,我发现Vue的指令模
顺晟科技
2022-09-13 11:53:26
283
在我们开发的页面中,让页面有一些动画效果,可以让页面更加有吸引力,只要不是处理太过,一般人还是希望有一些动态效果,如滚动动画加载,悬停处理变化等效果,本篇随笔介绍使用wow.js动画组件以及自定义的CSS样式处理动态效果,增加公司门户网站页面的动画效果。
npm install wowjs --save-dev
安装后,在vue项目的main.js中全局引入样式文件
//引入wowjs所需 import 'wowjs/css/libs/animate.css' //此处就是wowjs中自带的animate的位置
HTML页面代码使用动画的时候,添加对应的类属性即可,如下所示。
<section class="wow slideInLeft"></section> <section class="wow slideInRight"></section>
如我们实际很多页面都用了动画效果,代码如下所示,红框部分就是WOW动画所需的一些属性设置。
类名前面的wow是每一个带动画的元素都要加的,slideInLeft就是说明动画样式。后面的data-wow-duration(动画持续时间)、data-wow-delay(动画延迟时间)、data-wow-offset(元素的位置露出后距离底部多少像素执行)和data-wow-iteration(动画执行次数)这四个属性可选可不选。
data-wow-duration:更改动画持续时间
data-wow-delay:动画开始前的延迟
data-wow-offset:开始动画的距离(与浏览器底部相关)
data-wow-iteration:动画的次数重复(无限次:infinite)
WOW的脚本初始化,有些人放在了main.js里面定义WOW变量,也有些人在具体页面中定义WOW变量,并初始化,都可以实现效果。
WOW可以用import也可以用require进行导入定义使用。
if (process.browser) { // 在这里根据环境引入wow.js var { WOW } = require('wowjs') }
或者
import {WOW} from 'wowjs'
如果需要自定义配置,可如下使用:
var wow = new WOW({ boxClass: 'wow', animateClass: 'animated', offset: 0, mobile: true, live: true });
要页面出现动画效果,那么就必须初始化WOW
一般的初始化代码如下所示,这个放在mounted函数里面,就是需要等待所有页面组件完成加载后出现动画,或者鼠标滚动到指定的模块,也出现相应的动画效果。
mounted () { //为了避免异步无法刷新,使用了同步方式await this.$nextTick(() => { if (process.browser) { new WOW({ live: false }).init() } }) },
图片动画效果如下所示
除了借助类似WOW的第三方动画组件外,有时候我们在CSS样式里面,也可以定义一些动画效果,这个我们不深入探讨,毕竟CSS也是一门深奥的学问,我们借助一些hove的处理达到选择悬停的效果处理即可,这个Hover的处理也是比较常见的方式的。
1)悬停的时候,蒙版效果
其中HTML代码如下所示
<b-card class="overflow-hidden my-2"> <b-row no-gutters> <b-col cols="4" class="px-2"> <b-card-img :src="item.icon" class="rounded-circle"></b-card-img> </b-col> <b-col cols="8"> <b-card-body class="p-2"> <b-card-title class="text-truncate">{{item.title}}</b-card-title> <b-card-text class="card-body-text text-muted text-justify">{{item.desc}}</b-card-text> </b-card-body> </b-col> </b-row> <!-- 蒙版 --> <div class="mask"> <b-button variant="outline-info" class="mx-auto d-block my-btn" @click="handleDetail(item.id)">了解更多</b-button> </div> </b-card>
CSS定义代码如下所示,悬停的时候,显示class=“mask”中的蒙版内容,移开则隐藏。
.card { position: relative; .mask { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: none; align-items: center; text-align: center; background: rgba(0, 0, 0, 0.8); } } .card:hover { box-shadow: 0 0 10px #ccc; .mask { display: flex !important; } }
2)悬停的时候,增加边框
边框增加影子效果,如下所示
CSS 效果定义,hover的时候,box-shadow增加10px的边框
.card { border: none; } .card:hover { // background: #F1F1F1; box-shadow: 0 0 10px #ccc; }
或者下面效果
其中hover的CSS代码如下
.single_about:hover { box-shadow: 0 3px 45px 0 rgba(0, 0, 0, 0.2); z-index: 999; }
3、图片变换(比例放大)
CSS效果代码如下
<style scoped> .card img { width: 100%; -webkit-transform: scaleY(1); -moz-transform: scaleY(1); -o-transform: scaleY(1); -ms-transform: scaleY(1); transform: scaleY(1); -webkit-transition: all 0.7s ease-in-out; -moz-transition: all 0.7s ease-in-out; -o-transition: all 0.7s ease-in-out; -ms-transition: all 0.7s ease-in-out; transition: all 0.7s ease-in-out; } .card img:hover { -webkit-transform: scale(1.5); -moz-transform: scale(1.5); -o-transform: scale(1.5); -ms-transform: scale(1.5); transform: scale(1.5); } </style>
当然还有很多其他的效果,如渐变等,下面这样一张图片,叠加上一个从透明到黑色的渐变,
应用了 mask 之后,就会变成这样:
mask: linear-gradient(90deg, transparent, #fff);
以上就是使用wow.js动画组件以及自定义的CSS样式处理动态效果,两者配合使用,可以实现比较活跃的页面效果,使得页面内容展示更加丰富多彩。
19
2022-10
15
2022-09
14
2022-09
14
2022-09
14
2022-09
13
2022-09