≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > vue.js

基于 Vue 实现一个酷炫的 menu插件

人气:467 时间:2019-04-08

这篇文章主要为大家详细介绍了基于 Vue 实现一个酷炫的 menu插件,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

 

写在前面

 

最近看到一个非常酷炫的menu插件,一直想把它鼓捣成vue形式,谁让我是vue的死灰粉呢,如果这都不算爱:pensive:。:laughing:开个小玩耍,我们一起来探索黑魔法吧。观看本教程的读者需要具备一定的vue和css3的知识.

 

本文结构

 

1.效果演示

2.使用方法介绍

3.关键步骤讲解

 

正文

 

1.效果演示

【q1010.com温馨提示:图片暂缺】

pic_1

【q1010.com温馨提示:图片暂缺】

pic2

【q1010.com温馨提示:图片暂缺】

pic_3

在线演示 live demo

2.使用介绍

项目地址:github.com/MingSeng-W/vue-bloom-menu ,clone项目到本地

a. 首先在单文件组件里引入menu组件,导入common文件夹stylus里的menuConfig.stylus.

b.配置相应的参数

可选参数

* radius:default为100px,item距离menu的button的距离。

* startAngle:defaut为0,item开始的角度,以时钟3点钟方向记为0,然后顺时针方向为递增方向。

* endAngle:default为315,最后一个item的角度。

* itemNum:default为8

* animationDuration:default为0.5s,每个item动画的执行时间

* itemAnimationDelay:default为0.04s,每个item之间animation触发的间隔延迟时间

必选参数

* iconImgArr

import您需要的icon,然后生成iconImgArr(computed属性绑定),作为props传给menu组件

menu的位置

目前有center,corner两种位置,在menu的class里指定。center的class:.menu-center-wrapper

corner的class:.menu-left-corner-wrapper。当然自己指定位置也是ok的。

一个简单的example

【q1010.com温馨提示:图片暂缺】 

demo

3.关键步骤讲解

整个menu的实现关键在于计算menu展开后最后的坐标,以及展开与收缩的动画.(由于整个项目布局比较简单,所以这里主要讲解逻辑和动画的实现)

 

第一步:计算menu展开后横坐标和纵坐标

 

下面的x,y分别表示item在页面的位置,以x为例。

x:原始的位置,x2最后展开的位置,x1中间的过渡位置(主要是造成一个“拉回”的效果),以下是图片解释,为了解释简单明了,我放大了radius倍数以及增加了动画的执行时间。

【q1010.com温馨提示:图片暂缺】

位置解释

位置的计算:首先计算每个item之间的夹角,起始item是沿着顺时针布局的,每个item之间的夹角等于(endAngle-startAngle)/(itemNum-1)。当前item应该旋转的角度为:angleCur=startAngle+index*每个item之间的夹角。得到item的旋转角度之后,用Math.cos和Math.sin和radius相乘得到其横坐标和纵坐标.

关键代码:

【q1010.com温馨提示:图片暂缺】

计算每个item的夹角

【q1010.com温馨提示:图片暂缺】

位置解释

 

第二步,根据生成的坐标使用js动态生成animtion,并插入到样式文件中。

 

【q1010.com温馨提示:图片暂缺】

生成展开和收缩的keyframe

到这一步我们完成了点击menu展开与收缩。

 

第二步,完成点击item之后item放大与消失,其他的item缩小与消失

 

item消失的keyframe

【q1010.com温馨提示:图片暂缺】

item消失的keyframe

这里触发动画使用 vue提供transition ,当元素的v-show为false时,也就是display为none时,触发动画。

每个item动画完成后都会触发animationEnd事件,监听item的animationEnd事件,当所有动画依次触发完毕之后,提醒menu置于关闭状态( 父子组件通信 )。

我在menu组件里使用v-on监听animationEnd事件,item自己的动画执行后,通过$emit触发animationEnd事件,通知menu的动画计数count++,当count达到总的项目数的时候,menu进行关闭.

【q1010.com温馨提示:图片暂缺】

code

【q1010.com温馨提示:图片暂缺】

code

【q1010.com温馨提示:图片暂缺】

再次打开menu的时候检查与item绑定的showItem是否为false,是的话置为true。点击时需要拿到被点击item的index,得到全局的currentIndex即被点击的item的index。被点中的使用放大动画,否则使用缩小动画。

【q1010.com温馨提示:图片暂缺】

pic_6

【q1010.com温馨提示:图片暂缺】

关键代码

至此所有步骤讲解完毕

 

总结

 

以上所述是小编给大家介绍的基于 Vue 实现一个酷炫的 menu插件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对四海网网站的支持!

本文来自:http://www.q1010.com/184/4332-0.html

注:关于基于 Vue 实现一个酷炫的 menu插件的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:vue.js

您可能感兴趣的文章

  • 分析Vue如何支持JSX语法
  • vue+vue-validator 表单验证功能的实现代码
  • 分析Vue路由钩子及应用场景(小结)
  • vue中SPA单页面应用程序分析
  • vue router-link传参以及参数的使用实例
  • Mint UI 基于 Vue.js 移动端组件库
  • 分析使用webpack打包编写一个vue-toast插件
  • Vue2 配置 Axios api 接口调用文件的方法
  • 分析在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
  • vue-router2.0 组件之间传参及获取动态参数的方法
上一篇:解决vue组件中使用v-for出现告警问题及v for指令介绍
下一篇:vue-router2.0 组件之间传参及获取动态参数的方法
热门文章
  • Vue 报错TypeError: this.$set is not a function 的解决方法
  • vue实现动态添加数据滚动条自动滚动到底部的示例代码
  • vue项目设置scrollTop不起作用(总结)
  • vue项目中使用vue-i18n报错的解决方法
  • iview实现select tree树形下拉框的示例代码
  • 分析关于element级联选择器数据回显问题
  • vue项目打包后打开页面空白解决办法
  • 解决element ui select下拉框不回显数据问题的解决
  • element-ui table span-method(行合并)的实现代码
  • element-ui 设置菜单栏展开的方法
  • 最新文章
    • 理解vue ssr原理并自己搭建简单的ssr框架
    • vue favicon设置以及动态修改favicon的方法
    • vue-router启用history模式下的开发及非根目录部署方法
    • 从零开始在NPM上发布一个Vue组件的方法步骤
    • Element input树型下拉框的实现代码
    • Vue 报错TypeError: this.$set is not a function 的解决方法
    • Vue.js组件高级特性实例分析
    • 浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
    • 分析Vue.js自定义tipOnce指令用法实例
    • 浅谈vuex actions和mutation的异曲同工

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。