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 相关文章推荐
国外的为初学者写的JavaScript教程
Jun 09 Javascript
JQuery实现自定义对话框的代码
Jun 15 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
利用jquery操作Radio方法小结
Oct 20 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
Jan 19 Javascript
移动端基础事件总结与应用
Jan 12 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
javascript面向对象程序设计实践常用知识点总结
Jul 29 Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
详解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项目中类的自动加载实例讲解
2019/09/12 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
这段js代码得节约你多少时间
2011/12/20 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
python使用Image处理图片常用技巧分析
2015/06/01 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
校园安全广播稿
2014/02/08 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
2014年学生会工作总结
2014/11/07 职场文书
2014年汽车销售工作总结
2014/12/01 职场文书
杭白菊导游词
2015/02/10 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB
Java 异步任务计算FutureTask
2022/04/28 Java/Android