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 相关文章推荐
JS操作数据库的实例代码
Oct 17 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
JS中call/apply、arguments、undefined/null方法详解
Feb 15 Javascript
基于React.js实现原生js拖拽效果引发的思考
Mar 30 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
vue实现局部刷新的实现示例
Apr 16 Javascript
JS中async/await实现异步调用的方法
Aug 28 Javascript
layui use 定义js外部引用函数的方法
Sep 26 Javascript
vue全屏事件开发详解
Jun 17 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
Sep 08 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
如何写php程序?
2006/12/08 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
JS分页效果示例
2013/10/11 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
HTML的select控件美化
2017/03/27 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
Vue动态创建注册component的实例代码
2019/06/14 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python实现windows壁纸定期更换功能
2019/01/21 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
关于美容院的活动方案
2014/08/14 职场文书
卖房协议书样本
2014/10/30 职场文书
努力工作保证书
2015/02/28 职场文书
公司放假通知范文
2015/04/14 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
任命书格式模板
2015/09/22 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
DE1107机评
2022/04/05 无线电