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 DOM 操作实现代码
Aug 01 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
js字符串转成JSON
Nov 07 Javascript
Javascript基础教程之关键字和保留字汇总
Jan 18 Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
Sep 19 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
Apr 29 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
显示程序执行时间php函数代码
2013/08/29 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
PHP结合Jquery和ajax实现瀑布流特效
2016/01/07 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
jQuery Tools tab使用介绍
2012/07/14 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
jQuery.extend()、jQuery.fn.extend()扩展方法示例详解
2014/05/08 Javascript
jQuery使用slideUp方法实现控制元素缓慢收起
2015/03/27 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python通过poll实现异步IO的方法
2015/06/04 Python
Python代码解决RenderView窗口not found问题
2016/08/28 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
微信跳一跳python代码实现
2018/01/05 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
django模板结构优化的方法
2019/02/28 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
NumPy排序的实现
2020/01/21 Python
python如何把字符串类型list转换成list
2020/02/18 Python
python Selenium 库的使用技巧
2020/10/16 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
香港莎莎官网Sasa.com:亚洲著名国际化妆品商城
2019/11/10 全球购物
大学军训自我鉴定
2013/12/15 职场文书
青年志愿者活动总结
2014/04/26 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
慰问信范文
2015/02/14 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python