diff --git a/code/base-project/base-vue/src/App.vue b/code/base-project/base-vue/src/App.vue index 100ef316..3debfb19 100644 --- a/code/base-project/base-vue/src/App.vue +++ b/code/base-project/base-vue/src/App.vue @@ -11,28 +11,28 @@ export default { return const rect = el.getBoundingClientRect() - const size = Math.max(rect.width, rect.height) * 2 - const flash = document.createElement('span') + const size = Math.max(rect.width, rect.height) + const ripple = document.createElement('span') - flash.style.position = 'absolute' - flash.style.width = flash.style.height = `${size}px` - flash.style.left = `${(rect.width - size) / 2}px` - flash.style.top = `${(rect.height - size) / 2}px` - flash.style.background = 'rgba(255,255,255,0.2)' - flash.style.borderRadius = '50%' - flash.style.pointerEvents = 'none' - flash.style.transform = 'scale(0)' - flash.style.opacity = '0.4' - flash.style.transition = 'transform 0.3s ease-out, opacity 0.3s ease-out' + ripple.style.position = 'absolute' + ripple.style.width = ripple.style.height = `${size}px` + ripple.style.left = `${e.offsetX - size / 2}px` + ripple.style.top = `${e.offsetY - size / 2}px` + ripple.style.background = 'rgba(255,255,255,0.4)' // 柔和水波纹 + ripple.style.borderRadius = '50%' + ripple.style.pointerEvents = 'none' + ripple.style.transform = 'scale(0)' + ripple.style.opacity = '0.6' + ripple.style.transition = 'transform 0.4s, opacity 0.6s' - el.appendChild(flash) + el.appendChild(ripple) - requestAnimationFrame(() => { - flash.style.transform = 'scale(1)' - flash.style.opacity = '0' - }) + setTimeout(() => { + ripple.style.transform = 'scale(2)' + ripple.style.opacity = '0' + }, 10) - flash.addEventListener('transitionend', () => flash.remove()) + setTimeout(() => ripple.remove(), 600) }) }, }, @@ -42,7 +42,7 @@ export default {