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中显示隐藏的实现代码分析
Jul 26 Javascript
在Windows上安装Node.js模块的方法
Sep 25 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
分享使用AngularJS创建应用的5个框架
Dec 05 Javascript
jquery实现输入框实时输入触发事件代码
Dec 21 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
JS实现十字坐标跟随鼠标效果
Dec 25 Javascript
vue项目环境变量配置的实现方法
Oct 12 Javascript
node.js学习笔记之koa框架和简单爬虫练习
Dec 13 Javascript
简述pm2常用命令集合及配置文件说明
May 30 Javascript
原生js canvas实现鼠标跟随效果
Aug 02 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
PHP 数组实例说明
2008/08/18 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
用javascript做拖动布局的思路
2008/05/31 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
[48:24]完美世界DOTA2联赛循环赛LBZS vs Forest 第一场 10月30日
2020/10/31 DOTA
Python实现将xml导入至excel
2015/11/20 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
详解Python 中的容器 collections
2020/08/17 Python
如何基于Python按行合并两个txt
2020/11/03 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
英国票务网站:Ticketmaster英国
2018/08/27 全球购物
世界汽车零件:World Car Parts
2019/09/04 全球购物
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
房屋买卖协议书
2014/04/10 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
娱乐节目策划方案
2014/06/10 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
高三数学教学反思
2016/02/18 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
用python开发一款操作MySQL的小工具
2021/05/12 Python
java设计模式--七大原则详解
2021/07/21 Java/Android
python之基数排序的实现
2021/07/26 Python