Vue自定义加水波纹效果指令实例代码

目录
  • 前言
  • 自定义指令
    • 指令的作用
  • 水波纹
    • 水波纹效果
    • 实现
      • 原理
      • 核心
  • 代码实现
  • 总结

前言

大家好,我是不吃鱼d猫,过年以来。断更许久,又回来了,学无止境,作为程序员知识是要不断更新迭代的。在此期间,接触了几天的Vue,确实好用,今天给大家说个好玩的,在做项目过程中,点击按钮,大家肯定会接触过很花的效果。接下来给大家说说水波纹效果。

自定义指令

指令的作用

言简意赅,就是操作底层dom

当然vue自身有非常强大的指令功能,代替你进行dom操作,比如v-on绑定事件对不对,这应该大家熟悉的指令,100%要用到,毕竟js就是个事件驱动的语言。还有大家可以去官方文档去看看

水波纹

水波纹效果

如上图所示,点击按钮时鼠标四周会发散一个圆像水波一样。

实现

原理

我们在点击的时候,鼠标会发散一个圆,是不是有点击事件触发了,此时我们就增加一个span标签,当然要给他设置宽高,等属性,而且我们观察,圆的颜色是慢慢没有的,所以还有opacity属性,还有span是不是跟随鼠标移动的,所以还有添加定位属性。

核心

注意发现,span发散的圆是不断变大的,所以宽高是不断变化的,变化,我们就能想到定时器,定时器里面就可以控制圆的宽高,让span变化的属性不断有规律变化,当然要有临界值,我们可以看看下图

我们可以看看需求,水波纹,肯定是要覆整个按钮的,那么span的发散半径肯定就是按钮中最大的距离,如图所示,对角线肯定最长边,一目了然。怎么求,在构造函数Math有个方法可以求Math.sqrt(a*a+b*b)所以span的宽高是2倍的最长距离。所以临界值找到了,达到都就清除定时器,让span的属性不在变化。并且删除span。

代码实现

上面我们分析了分析,接下来我们用代码实现。

结构:

 <div class="app">
        <h1>{{title}}</h1>
        <button v-shuibowen="">点我发散水波纹</button>
        <!-- <div class="box" v-shuibowen=""></div> -->
    </div>

实例化一个vue对象。

 const vm = new Vue({
            data: {
                title: "自定义指定设置水波纹"
            }
        }).$mount(".app")

自定义指令

 Vue.directive('shuibowen', {
                        //binding 指令携带的变量数据
            inserted: function(el, binding) {
                el.addEventListener('click', function(e) {
                    let x = e.clientX - el.offsetLeft
                    let y = e.clientY - el.offsetTop

                    //在鼠标位置增加一个span标签
                    let span = document.createElement("span")
                    span.style.position = "absolute"
                    span.style.background = binding.value || 'rgba(150, 91, 91, .5)'
                    span.style.opacity = 1;
                    span.style.borderRadius = '50%'
                    el.append(span)
                    let width = 0
                    let height = 0
                    let opacity = 1
                    let max_length = Math.sqrt(el.offsetWidth * el.offsetWidth + el.offsetHeight * el.offsetHeight) * 2

                    let time = setInterval(() => {
                        width += 5
                        height += 5
                        opacity -= 0.01
                        //判断超出最大值时,清除定时,并且删除span
                        if (width < max_length) {
                            span.style.width = width + 'px'
                            span.style.height = height + 'px'
                            span.style.opacity = opacity;
                            span.style.left = x - span.offsetWidth / 2 + 'px'
                            span.style.top = y - span.offsetHeight / 2 + 'px'
                        } else {
                            clearInterval(time)
                            time = null;
                            span.remove()
                        }
                    }, 10)
                })

            }
        })

总结

刚接触Vue,代码没有优化,望见谅。自定义水波纹指令的好处就是,哪里需要用到水波纹的效果就往哪里加。

到此这篇关于Vue自定义加水波纹效果指令的文章就介绍到这了,更多相关Vue自定义水波纹指令内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue.js每天必学之指令系统与自定义指令

    基础 除了内置指令,Vue.js 也允许注册自定义指令.自定义指令提供一种机制将数据的变化映射为 DOM 行为. 可以用 Vue.directive(id, definition) 方法注册一个全局自定义指令,它接收两个参数指令 ID 与定义对象.也可以用组件的 directives 选项注册一个局部自定义指令. 钩子函数 定义对象可以提供几个钩子函数(都是可选的): •bind:只调用一次,在指令第一次绑定到元素上时调用. •update: 在 bind 之后立即以初始值为参数第一次调用,之后

  • vue自定义指令实现方法详解

    本文实例讲述了vue自定义指令实现方法.分享给大家供大家参考,具体如下: vue中的指令就是v-on v-bind v-show等等,那么自定义指令是什么呢? 自己定义的指令就是自定义指令. 语法: Vue.directive(id, definition) 这里可以参考vue中的指令 <h1 v-if="yes">Yes</h1> 其中,if就是指令ID,yes是expression Vue.directive()传入接受两个参数,id是指指令ID,defin

  • 如何在vue中使用百度地图添加自定义覆盖物(水波纹)

    简介 一如既往,我来给大家分享一个项目中遇到的比较有意思的需求并介绍一下相应的实现过程. 话不多说,直接上图: 具体的应用场景简而言之就是需要我们在地图上添加如图中所示的自定义覆盖物.实现的过程作者分为以下两点给大家介绍介绍. 水波紋的实现 自定义覆盖物的实现 水波紋的实现 这个需求的实现肯定是离不开我们自己写自定义覆盖物的,那么首先我们来讨论一下水波纹动画的实现. 首先我们可以看到图中的覆盖物是由一个红心和水波紋组成,其中红心是固定不动的,那么我们可以直接这么写: <div class="

  • Vue自定义指令详解

    在 AngularJs 中,它的指令使用 directive ( name,factor_function)来实现: angular.module( 'myapp' ,[]) .directive (myDirective,function (){ return{ template : '', restrict: '', replace: '', ........ } }) 除了内置指令,Vue.js 也允许组件自定义指令. + 自定义指令提供一种机制将数据的变化映射为 DOM 行为 + Vue

  • Vue自定义指令使用方法详解

    Vue自定义指令的使用,具体内容如下 1.自定义指令的语法 Vue自定义指令语法如下: Vue.directive(id, definition) 传入的两个参数,id是指指令ID,definition是指定义对象.其中,定义对象可以提供一些钩子函数 2.钩子函数 定义对象的钩子函数如下: 钩子函数的参数 el: 指令所绑定的元素,可以用来直接操作 DOM . binding: 一个对象,包含以下属性: *name: 指令名,不包括 v- 前缀. *value: 指令的绑定值, 例如: v-my

  • Vue自定义加水波纹效果指令实例代码

    目录 前言 自定义指令 指令的作用 水波纹 水波纹效果 实现 原理 核心 代码实现 总结 前言 大家好,我是不吃鱼d猫,过年以来.断更许久,又回来了,学无止境,作为程序员知识是要不断更新迭代的.在此期间,接触了几天的Vue,确实好用,今天给大家说个好玩的,在做项目过程中,点击按钮,大家肯定会接触过很花的效果.接下来给大家说说水波纹效果. 自定义指令 指令的作用 言简意赅,就是操作底层dom 当然vue自身有非常强大的指令功能,代替你进行dom操作,比如v-on绑定事件对不对,这应该大家熟悉的指令

  • Android自定义水波纹动画Layout实例代码

    话不多说,我们先来看看效果: Hi前辈搜索预览 这一张是<Hi前辈>的搜索预览图,你可以在这里下载这个APP查看更多效果: http://www.wandoujia.com/apps/com.superlity.hiqianbei LSearchView 这是一个MD风格的搜索框,集成了ripple动画以及search时的loading,使用很简单,如果你也需要这样的搜索控件不妨来试试:https://github.com/onlynight/LSearchView RippleEverywh

  • android 自定义圆角button效果的实例代码(自定义view Demo)

    概述 在平时开发过程中经常会碰到需要使用圆角button的情况,一般也会包括很多其他小功能,比如要在里面添加img,设置不同的圆角大小等. 针对这样的场景,直接使用创建多个shape,定义多个xml文件也是可以实现的.但是如果使用非常频繁,那么直接自定义一个就会来的非常方便. 甚至在一些情况下,不是可以用shape定义的规则图形,比如需要用到贝塞尔曲线等. 如果全局需要这样风格的view,那么自定义一个View是非常必要的. 本文主要是个demo记录,如有需要的读者可以借鉴学习. Demo 主要

  • 使用Vue 自定义文件选择器组件的实例代码

    本文 GitHub  https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料.欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西. 文件选择元素是web上最难看的 input 类型之一.它们在每个浏览器中实现的方式不同,而且通常非常难看.这里有一个解决办法,就是把它封装成一个组件. 安装 如果你尚未设置项目,可以使用 vue-cli 的 webpack-simple 模板启动一个新项目. $ npm

  • vue自定义弹框效果(确认框、提示框)

    本文实例为大家分享了vue自定义弹框效果的具体代码,供大家参考,具体内容如下 1.自定义确认框和提示框 根据传入的type来判断是确认框或提示框 <template> <transition name="confirm-fade"> <div v-if="isShowConfirm" class="my-confirm" @click.stop="clickFun('clickCancel')"&

  • vue自定义弹框效果(确认框、提示框)

    本文实例为大家分享了vue自定义弹框效果的具体代码,供大家参考,具体内容如下 1.自定义确认框和提示框 根据传入的type来判断是确认框或提示框 <template> <transition name="confirm-fade"> <div v-if="isShowConfirm" class="my-confirm" @click.stop="clickFun('clickCancel')"&

  • Vue商品控件与购物车联动效果的实例代码

    本篇我们将构建商品控件与购物车联动. 商品控件 商品控件的结构编写 在商品组件的<template>标签内完成项目结构,以及数据,事件的绑定,与判断逻辑的书写. <template> <div class="goods"> <div class="menu-wrapper" ref="menuScroll"> <ul> <!--专场--> <li class="

  • vue.js层叠轮播效果的实例代码

    最近写公司项目有涉及到轮播banner,一般的ui框架无法满足产品需求:所以自己写了一个层叠式轮播组件:现在分享给大家: 主要技术栈是vue.js ;javascript;jquery:确定实现思路因工作繁忙,暂时不做梳理了:直接贴代码参考: 此组件是基于jquer封装,在vue项目中使用首先需要先安装jquery插件:指令:npm install jquery,安装完成之后再webpack.base.conf.js配置插件: plugins: [ new webpack.ProvidePlug

  • vue实现表格增删改查效果的实例代码

    整理文档,搜刮出一个vue实现表格增删改查效果的实例代码,稍微整理精简一下做下分享. 实现效果 我们把这些用户信息保存到list的数组中,然后增删改查就在这个数组上进行: list: [ { username: 'aaaaa', email: '123@qq.com', sex: '男', province: '北京市', hobby: ['篮球', '读书', '编程'] }, { username: 'bbbbb', email: 'bbbbbbb@163.com', sex: '女', p

  • vue 实现数字滚动增加效果的实例代码

    项目中需要做数字滚动增加的效果,一开始很懵,研究了一下原理,发现很简单,贴出来分享一下 ^_^ 数字滚动组件: <template> <div class="number-grow-warp"> <span ref="numberGrow" :data-time="time" class="number-grow" :data-value="value">0</sp

随机推荐