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 相关文章推荐
网页里控制图片大小的相关代码
Jun 25 Javascript
javascript生成/解析dom的CDATA类型的字段的代码
Apr 22 Javascript
jquery实现手风琴效果实例代码
Nov 15 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
jquery实现动态操作select选中
Feb 11 Javascript
详解使用webpack打包编写一个vue-toast插件
Nov 08 Javascript
利用ES6实现单例模式及其应用详解
Dec 09 Javascript
webpack-dev-server自动更新页面方法
Feb 22 Javascript
javascript将非数值转换为数值
Sep 13 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
Dec 05 Javascript
vue实现菜单切换功能
May 08 Javascript
Vue路由切换页面不更新问题解决方案
Jul 10 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加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
ajax读取数据后使用jqchart显示图表的方法
2015/06/10 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
深入理解JavaScript中的块级作用域、私有变量与模块模式
2016/10/31 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
解决vue-router路由拦截造成死循环问题
2020/08/05 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python入门基础之用户输入与模块初认识
2016/11/14 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
详解python Todo清单实战
2018/11/01 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
如何利用find命令查找文件
2016/11/18 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
理财投资建议书
2014/03/12 职场文书
岗位廉政承诺书
2014/03/27 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
python如何正确使用yield
2021/05/21 Python