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函数库)S.Sams Lifexperience ScriptClassLib
Apr 29 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
js replace 与replaceall实例用法详解
Aug 03 Javascript
javascript实现左右控制无缝滚动
Dec 31 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
全面了解js中的script标签
Jul 04 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
详解Vue2.0 事件派发与接收
Sep 05 Javascript
使用koa2创建web项目的方法步骤
Mar 12 Javascript
layui prompt 设置允许空白提交的方法
Sep 24 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中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
隐性调用php程序的方法
2015/06/13 PHP
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用
2014/11/23 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
AngularJS 输入验证详解及实例代码
2016/07/28 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
记录Django开发心得
2014/07/16 Python
Python字符串详细介绍
2015/05/09 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
英国奢侈品牌时尚购物平台:Farfetch(支持中文)
2020/02/18 全球购物
教师自荐书
2013/10/08 职场文书
童装店创业计划书
2014/01/09 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
2014年双拥工作总结
2014/11/21 职场文书
大雁塔导游词
2015/02/04 职场文书
高校教师个人总结
2015/02/10 职场文书
体检通知范文
2015/04/21 职场文书
导游词之上海豫园
2019/10/24 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android