Vue波纹按钮组件制作

 更新时间:2018年04月30日 13:59:44   投稿:laozhang  
本文给大家分享了VUE制作点击按钮出现水波纹效果的组件过程,对此有需求的朋友可以跟着学习下。

先说一下用法:

<zk-button class="btn btn-default">默认按钮</zk-button>
<zk-button class="btn btn-default btn-round">默认按钮</zk-button>
<zk-button class="btn btn-default btn-round" :speed="4" :opacity="0.6">定义速度和初始的波浪透明度</zk-button>

原理:

这里用的是canvas + requestAnimationFrame(兼容性可以网上找一下解决方法) 绘制的波纹,有些用的是css transform + setTimeout做的,我感觉不太好。

模板(template):

<template>
 <button class="zk-btn">
  <canvas class="zk-ripple" @click="ripple"></canvas>
  <slot></slot>
 </button>
</template>

点击代码如下(我已经加入详细的注释)

ripple(event) {
 // 清除上次没有执行的动画
 if (this.timer) {
  window.cancelAnimationFrame(this.timer);
 }
 this.el = event.target;
 // 执行初始化
 if (!this.initialized) {
  this.initialized = true;
  this.init(this.el);
 }
 this.radius = 0;
 // 点击坐标原点
 this.origin.x = event.offsetX;
 this.origin.y = event.offsetY;
 this.context.clearRect(0, 0, this.el.width, this.el.height);
 this.el.style.opacity = this.opacity;
 this.draw();
},

这里主要初始化canvas和获取用户点击的位置坐标,并开始绘制。

循环绘制

draw() {
 this.context.beginPath();
 // 绘制波纹
 this.context.arc(this.origin.x, this.origin.y, this.radius, 0, 2 * Math.PI, false);
 this.context.fillStyle = this.color;
 this.context.fill();
 // 定义下次的绘制半径和透明度
 this.radius += this.speed;
 this.el.style.opacity -= this.speedOpacity;
 // 通过判断半径小于元素宽度或者还有透明度,不断绘制圆形
 if (this.radius < this.el.width || this.el.style.opacity > 0) {
  this.timer = window.requestAnimationFrame(this.draw);
 } else {
  // 清除画布
  this.context.clearRect(0, 0, this.el.width, this.el.height);
  this.el.style.opacity = 0;
 }
}

总结:

上面代码我没有复制完整,大家想看源码可以下载看一下

这是4月最后一天上班了,5.1要好好休息一下。

相关文章

  • vue将html页面生成高清晰pdf文件的方法

    vue将html页面生成高清晰pdf文件的方法

    最近工作中遇到个需求,需要实现个可视化图表页的PDF文件导出,所以下面这篇文章主要给大家介绍了关于利用vue如何将html页面生成高清晰pdf文件的相关资料,需要的朋友可以参考下
    2022-03-03
  • Vue路由vue-router详细讲解指南

    Vue路由vue-router详细讲解指南

    这篇文章主要介绍了Vue路由vue-router详细讲解指南,对vue-router感兴趣的同学,可以参考下
    2021-04-04
  • vue调用swiper插件步骤教程(最易理解且详细)

    vue调用swiper插件步骤教程(最易理解且详细)

    有时候我们需要在vue中使用轮播组件,如果是在vue组件中引入第三方组件的话,最好通过npm安装,从而进行统一安装包管理,下面这篇文章主要给大家介绍了关于vue调用swiper插件的相关资料,需要的朋友可以参考下
    2023-04-04
  • 解决vite项目Uncaught Syntaxerror:Unexpected token>vue项目上线白屏问题

    解决vite项目Uncaught Syntaxerror:Unexpected token>vue项

    这篇文章主要介绍了解决vite项目Uncaught Syntaxerror:Unexpected token>vue项目上线白屏问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue 开发必须知道的36个技巧(小结)

    Vue 开发必须知道的36个技巧(小结)

    这篇文章主要介绍了Vue 开发必须知道的36个技巧(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • vue实现的封装全局filter并统一管理操作示例

    vue实现的封装全局filter并统一管理操作示例

    这篇文章主要介绍了vue实现的封装全局filter并统一管理操作,结合实例形式详细分析了vue封装全局filter及相关使用技巧,需要的朋友可以参考下
    2020-02-02
  • Vue 使用超图SuperMap的实践

    Vue 使用超图SuperMap的实践

    作为一名刚入门计算机语言的人来说,要想快速完成测试开发地图项目,肯定要接用到SuperMap,本文主要介绍了Vue 使用超图SuperMap的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • vue如何通过image-conversion实现图片压缩详解

    vue如何通过image-conversion实现图片压缩详解

    在Vue项目中上传大图片时,可以通过image-conversion库压缩至指定大小,这篇文章主要介绍了vue如何通过image-conversion实现图片压缩的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • Vue3中事件总线的具体使用

    Vue3中事件总线的具体使用

    本文主要介绍了Vue3中事件总线的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Vue代理报错404问题及解决(vue配置proxy)

    Vue代理报错404问题及解决(vue配置proxy)

    这篇文章主要介绍了Vue代理报错404问题及解决(vue配置proxy),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论