vue-waves-点击容器出现水波纹效果

vue

  1. 创建 waves.css文件

.waves-ripple {

position: absolute;

border-radius: 100%;

background-color: rgba(0, 0, 0, 0.15);

background-clip: padding-box;

pointer-events: none;

-webkit-user-select: none;

-moz-user-select: none;

-ms-user-select: none;

user-select: none;

-webkit-transform: scale(0);

-ms-transform: scale(0);

transform: scale(0);

opacity: 1;

}

.waves-ripple.z-active {

opacity: 0;

-webkit-transform: scale(2);

-ms-transform: scale(2);

transform: scale(2);

-webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;

transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;

transition: opacity 1.2s ease-out, transform 0.6s ease-out;

transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;

}

  2. 创建 waves.js 文件

import './waves.css'

const context = '@@wavesContext'

function handleClick(el, binding) {

function handle(e) {

const customOpts = Object.assign({}, binding.value)

const opts = Object.assign({

ele: el, // 波纹作用元素

type: 'hit', // hit 点击位置扩散 center中心点扩展

color: 'rgba(0, 0, 0, 0.15)' // 波纹颜色

},

customOpts

)

const target = opts.ele

if (target) {

target.style.position = 'relative'

target.style.overflow = 'hidden'

const rect = target.getBoundingClientRect()

let ripple = target.querySelector('.waves-ripple')

if (!ripple) {

ripple = document.createElement('span')

ripple.className = 'waves-ripple'

ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px'

target.appendChild(ripple)

} else {

ripple.className = 'waves-ripple'

}

switch (opts.type) {

case 'center':

ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + 'px'

ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + 'px'

break

default:

ripple.style.top =

(e.pageY - rect.top - ripple.offsetHeight / 2 - document.documentElement.scrollTop ||

document.body.scrollTop) + 'px'

ripple.style.left =

(e.pageX - rect.left - ripple.offsetWidth / 2 - document.documentElement.scrollLeft ||

document.body.scrollLeft) + 'px'

}

ripple.style.backgroundColor = opts.color

ripple.className = 'waves-ripple z-active'

return false

}

}

if (!el[context]) {

el[context] = {

removeHandle: handle

}

} else {

el[context].removeHandle = handle

}

return handle

}

export default {

bind(el, binding) {

el.addEventListener('click', handleClick(el, binding), false)

},

update(el, binding) {

el.removeEventListener('click', el[context].removeHandle, false)

el.addEventListener('click', handleClick(el, binding), false)

},

unbind(el) {

el.removeEventListener('click', el[context].removeHandle, false)

el[context] = null

delete el[context]

}

}

  3. 创建 index.js 文件

import waves from './waves'

const install = function(Vue) {

Vue.directive('waves', waves)

}

if (window.Vue) {

window.waves = waves

Vue.use(install); // eslint-disable-line

}

waves.install = install

export default waves

  4. 使用

使用的话 直接在div上使用v-waves标签即可

<div v-waves class="card-panel"> </div>

<script>

import waves from '@/directive/waves' //引入

export default {

directives: { waves } //注册

}

</script>

转 : https://www.jianshu.com/p/883a30aa8dd6

或 https://ext.dcloud.net.cn/plugin?id=1671

以上是 vue-waves-点击容器出现水波纹效果 的全部内容, 来源链接: utcz.com/z/378280.html

回到顶部