vue裁切预览组件功能的实现步骤


Posted in Javascript onMay 04, 2018

vue版本裁切工具,包含预览功能

最终效果: qiuyaofan.github.io/vue-crop-de…

源码地址: github.com/qiuyaofan/v…

第一步:先用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源码)

最终生成的文件结构如下图:

vue裁切预览组件功能的实现步骤 

第三步:注册组件

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)
 })
}

总结

以上所述是小编给大家介绍的vue裁切预览组件功能的实现步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
鼠标右击事件代码(asp.net后台)
Jan 27 Javascript
使用Chart.js图表库制作漂亮的响应式表单
Oct 28 Javascript
jQuery原理系列-常用Dom操作详解
Jun 07 Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 Javascript
Bootstrap select实现下拉框多选效果
Dec 23 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
关于JavaScript中forEach和each用法浅析
Jul 27 Javascript
微信小程序模板(template)使用详解
Jan 31 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
May 03 Javascript
MVVM 双向绑定的实现代码
Jun 21 Javascript
Vue插件之滑动验证码
Sep 21 Javascript
详解vue组件基础
May 04 #Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 #Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 #jQuery
Vue.js 踩坑记之双向绑定
May 03 #Javascript
Vue利用canvas实现移动端手写板的方法
May 03 #Javascript
Node.Js中实现端口重用原理详解
May 03 #Javascript
原生JS实现的雪花飘落动画效果
May 03 #Javascript
You might like
1.PHP简介
2006/10/09 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
PHP If Else(elsefi) 语句
2013/04/07 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
python 剪切移动文件的实现代码
2018/08/02 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Python3列表内置方法大全及示例代码小结
2019/05/10 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
Python list和str互转的实现示例
2020/11/16 Python
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
Ibatis如何使用动态表名
2015/07/12 面试题
Exception类的常用方法
2012/06/16 面试题
中国好声音广告词
2014/03/18 职场文书
中学生评语大全
2014/04/18 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
员工保密承诺书
2014/05/28 职场文书
组工干部演讲稿
2014/09/02 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
大二学生自我检讨书
2014/10/23 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL