這次帶給大家如何使用vue裁切預覽元件,使用vue裁切預覽元件的注意事項有哪些,以下就是實戰案例,一起來看一下。
第一步:先用vue-cli安裝鷹架(不會安裝的看vue-cli官網)
// 初始化vue-cli vue init webpack my-plugin
第二步:建立檔案
新src/ views/validSlideDemo.vue,
src/components裡新建VueCrop/index.js,VueCrop.vue,
在routes/index.js設定存取路由(具體看github來源碼)
最終產生的檔案結構如下圖:
第三個步驟:註冊元件
1.引用所有外掛程式:src/components/index .js
// 导入插件入口文件 import VueCrop from './VueCrop/index.js' const install = function (Vue, opts = {}) { /* 如果已安装就跳过 */ if (install.installed) return // 注册插件 Vue.component(VueCrop.name, VueCrop) } // 全局情况下注册插件 if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } export { install, // 此处是为了兼容在vue内单独引入这个插件,如果是main.js全局引入就可以去掉 VueCrop }
2.全域呼叫插件:src/main.js ( vue plugins官方文件解說install )
import Vue from 'vue' import App from './App' import router from './router' // 新加的:导入入口文件 import { install } from 'src/components/index.js' // 全局调用,相当于调用 `MyPlugin.install(Vue)` Vue.use(install) Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })
3.VueCrop入口檔案呼叫VueCrop.vue:src/components/VueCrop /index.js
// 导入vue import VueCrop from './VueCrop.vue' // Vue.js 的插件应当有一个公开方法 install 。这个方法的第一个参数是 Vue 构造器 VueCrop.install = function (Vue) { // 注册组件 Vue.component(VueCrop.name, VueCrop) } export default VueCrop
小結:我一開始一直有個誤解,以為myPlugin.install是vue的一個方法,其實不是,他只是我們建構plugin識的一個公開方法,可以理解為原生js中的建構子的方法:
function MyPlugin(){ console.info('构造函数') } MyPlugin.prototype.install=function(vue,options){ console.info('构造器vue:'+vue); }
而真正註冊元件的是:Vue.component()
所以,vue外掛程式註冊的過程是:
1.呼叫main.js中:
import { install } from 'src/components/index.js' vue.use(install)
2.index.js加入install方法,呼叫Vue.component註冊元件
3.元件內的index.js同所有元件的index.js一樣
第四步:設計開發自己的元件,建構元件結構
在此之前,可以先了解下元件的命名規格等,可參考文章掘金:Vue前端開發規範 ,其中第2點有詳細講解
首先,確定自己的呼叫方式和需要暴露的參數
<vue-crop :crop-url="cropUrl1" :ratio="ratio" :height="460" :width="460" :previewJson="previewJson1" class="c-crop--preview_right" @afterCrop="afterCrop" > >
其中,@afterCrop="afterCrop"是裁切完成的回呼函數,其他是屬性配置
在元件src/components/VueCrop/VueCrop.vue
內,可以用this.$emit('afterCrop')
觸發demo裡的afterCrop事件
元件結構上,主要分為:裁切主要部分,選框元件(VueCropTool.vue) ,裁切框寬度、位置座標等計算(VueCropMove.js),拖曳事件註冊公共js(components/utils/draggable.js)
draggable.js是參考element裡的,修改了一部分,原始碼如下
export default function (element, options) { const moveFn = function (event) { if (options.drag) { options.drag(event) } } // mousedown fn const downFn = function (event) { if (options.start) { // 调用参数中start函数 options.start(event) } } // mouseup fn const upFn = function (event) { document.removeEventListener('mousemove', moveFn) document.removeEventListener('mouseup', upFn) document.onselectstart = null document.ondragstart = null if (options.end) { // 调用参数中end函数 options.end(event) } } // 绑定事件 element.addEventListener('mousedown', event => { if (options.stop && options.stop(event, element) === false) { return false } document.onselectstart = function () { return false } document.ondragstart = function () { return false } document.addEventListener('mousedown', downFn) document.addEventListener('mousemove', moveFn) document.addEventListener('mouseup', upFn) }) }
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是如何使用vue裁切預覽元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!