项目地址:vue-countTo
配套完整后台demo地址:vue-element-admin
系类文章一:手摸手,带你用vue撸后台 系列一(基础篇)
系类文章二:手摸手,带你用vue撸后台 系列二(登陆权限篇)
系类文章三:手摸手,带你用vue撸后台 系列三(实战篇)
系类文章四:手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
系类文章:手摸手,带你优雅的使用 iconvue
最近几个月我司把以前两三年的全部业务都用了 vue 重构了一遍,前台使用 vue+ssr,后台使用了 vue+element,在此过程当中封装和本身写了不少 vue component。其实vue 写 component 至关简单和方便,github上有不少的 vue component 都只是简单的包装了一些 jquery 或者原生 js 的插件,但我我的是不太喜欢使用这些第三方封装的。理由以下:jquery
因此我以为大部分组件仍是本身封装来的更为方便和灵活一些。webpack
接下来咱们一块儿手摸手教改造包装一个js插件,只要几分钟就能够封装一个专属于你的 vue component。封装对象:countUp.js,改造后结果 vue-countTo。git
首先咱们用官方提供的 vue-cli 来构建项目 这里选择了 webpack-simple (组件相对而言比较简单,不须要不少复杂的功能,因此 webpack-simple 已经知足需求了)github
$ npm install -g vue-cli $ vue init webpack-simple my-project $ cd my-project $ npm install
安装countup.jsweb
$ npm install countup.js $ npm run dev
启动项目以后按照 countup.js 官方 demo 初始化插件vue-cli
<template> <span ref='countup'></span> </template> <script> import CountUp from 'countup.js' export default { name: 'countup-demo', data () { return { numAnim:null } }, mounted(){ this.initCountUp() }, methods:{ initCountUp(){ this.numAnim = new CountUp(this.$refs.countup,0, 2017) this.numAnim.start(); } } } </script>
刷新页面,就这么简单,countUp.js 已经生效了。npm
接下来查看 countUp.js 的 github 发现它定义了以下可配置参数json
对应 vue 就是 props,类型和初始化一目了然。segmentfault
props: { start: { type: Number, default: 0 }, end: { type: Number, default: 2017 }, decimal: { type: Number, default: 0 }, duration: { type: Number, default: 2.5 }, options: { type: Object } }
以后再将countup以前写死的配置项替换为动态props就能够了
this.numAnim = new CountUp(this.$refs.countup, this.start, this.end, this.decimal, this.duration, this.options)
使用组件
<vue-count-up :end="2500" :duration="2.5"></vue-count-up>
只要几分钟一个属于本身的原生组件就包装好了,就是这么简单。完整demo
这时候你若是以为使用countUp.js 还有些不知足你的需求,那你能够选择本身来造轮子了。
首先固然是阅读源码了
其实源码也就两部分核心代码
第一部分:主要是就是 requestAnimationFrame
,在游览器不支持requestAnimationFrame
的状况下使用 setTimeout
来模拟,这段代码值得仔细阅读,本身在平时的项目中也能借鉴使用这段代码。
第二部分:就是 count 函数
看懂这两部分以后造轮子就至关的简单了, demo
造轮子过程当中发现 countUp,并无 autoplay 这个参数项可让组件自动开始count,不要紧。。。咱们能够本身来撸,咱们首先定义 autoplay 这个props为布尔值,默认全部组件 autoplay 为 true
props:{ autoplay: { type: Boolean, required: false, default: true } }
定义好 props 以后只要在 mounted 生命周期内加一个判断就完事了。
mounted() { if (this.autoplay) { this.start(); } }
咱们的 countUp 组件能够自动 count 了!
在不跨项目的状况下以前所作的已经知足需求了。但咱们不能就此知足,我想让世界上更多的人来使用个人插件,这时候就要上传 npm了 demo 。
首先咱们新建一个index.js
import CountTo from './vue-countTo.vue' // 导出模块 export default CountTo //global 状况下 自动安装 if (typeof window !== 'undefined' && window.Vue) { window.Vue.component('count-to', CountTo) }
同时咱们也要改造一下 webpack 的配置,由于不是全部使用你组件的人都是经过 npm 安装使用 import 引入组件的的。
还有不少人是经过 <script>
标签的方式直接引入的,因此咱们要将 libraryTarget
改成 umd 格式
library: 'CountTo', libraryTarget: 'umd', umdNamedDefine: true
大功告成,如今只要将它发布到 npm 就能够了,首先注册一个npm 帐号,
以后配置本身的 package.json (注意填写 version,每次发布的 version 不能相同;main 为入口文件地址)。
以后只要一行命令 npm publish 你的项目就发到 npm 了,快让小伙伴们一块儿来用你的vue component 吧!
这里这是拿了一个很简单的 countUp 组件举了一个简单例子,有的时候本身动手丰衣足食,不少插件的封装比想象中简单的多。产品经理不再会看到我由于这个fu**插件怎么不支持这个功能而愁眉苦脸了,咱们能够更好地知足产品了~~
完整项目地址:https://github.com/PanJiaChen... 欢迎 star
常规占坑,这里是手摸手,带你用vue撸后台系类
完整项目地址:vue-element-admin
系类文章一:手摸手,带你用vue撸后台 系列一(基础篇)
系类文章二:手摸手,带你用vue撸后台 系列二(登陆权限篇)
系类文章三:手摸手,带你用vue撸后台 系列三(实战篇)
系类文章四:手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
系类文章:手摸手,带你优雅的使用 icon
楼主我的免费圈子。