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 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
Oct 17 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
js实现点击向下展开的下拉菜单效果代码
Sep 01 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
微信小程序收藏功能的实现代码
Jun 12 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
Jul 31 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
php 数组使用详解 推荐
2011/06/02 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
JQuery.dataTables表格插件添加跳转到指定页
2017/06/09 jQuery
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
使用Python对Excel进行读写操作
2017/03/30 Python
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
TensorFlow入门使用 tf.train.Saver()保存模型
2018/04/24 Python
Python异常的检测和处理方法
2018/10/26 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python 代码调试技巧示例代码
2020/08/11 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
幼儿园儿童节主持词
2014/03/21 职场文书
小学生期末评语大全
2014/04/21 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
个人买房协议书范本
2014/10/06 职场文书
亮剑观后感300字
2015/06/05 职场文书
部门主管竞聘书
2015/09/15 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
muduo TcpServer模块源码分析
2022/04/26 Redis
MySQL 数据表操作
2022/05/04 MySQL