当前位置: 首页 > news >正文

大型网站 开发语言画册什么网站做方便

大型网站 开发语言,画册什么网站做方便,wordpress主题模版,wordpress文章页设置说在前面 #x1f5bc;文件拖拽上传功能现在已经随处可见#xff0c;大家应该都用过了吧#xff0c;那么它具体是怎么实现的大家有去了解过吗#xff1f;今天我们一起来实现一下这个功能#xff0c;并封装一个拖拽上传组件吧。 效果展示 体验地址#xff1a;http://jyeon…说在前面 文件拖拽上传功能现在已经随处可见大家应该都用过了吧那么它具体是怎么实现的大家有去了解过吗今天我们一起来实现一下这个功能并封装一个拖拽上传组件吧。 效果展示 体验地址http://jyeontu.xyz/jvuewheel/#/JDragUploadView 功能实现 原生JavaScrip实现 首先我们应该先将页面写好 !DOCTYPE html html langenheadtitle点击或拖拽上传并显示图片/titlestylebody {display: flex;flex-direction: column;}h1 {text-align: center;}#drop-zone {width: 300px;height: 200px;border: 2px dashed #ccc;margin: 20px auto;text-align: center;line-height: 200px;font-size: 18px;}#uploaded-image {max-width: 300px;max-height: 300px;margin: 20px auto;}/style/headbodyh1点击或拖拽上传并显示图片示例/h1div iddrop-zone点击或拖拽上传图片/divimg iduploaded-image src alt上传的图片 /script/script/body /html我们试下直接拖拽图片到页面上是什么效果 我们发现直接将图片拖拽到页面上会在新页面打开图片那么我们需要阻止这一个默认行为以允许放置页面的拖拽行为主要会触发以下几个事件 dragenter dragenter 事件在可拖动的元素或者被选择的文本进入一个有效的放置目标时触发。 目标对象是用户直接选择的范围由用户直接指示作为放置目标的元素或者 body 元素。 dragleave dragleave 事件在拖动的元素或选中的文本离开一个有效的放置目标时被触发。 此事件不可取消。 dragover dragover 事件在可拖动的元素或者被选择的文本被拖进一个有效的放置目标时每几百毫秒触发。 该事件在放置目标上触发。 drop drag 事件在用户拖动元素或选择的文本时每隔几百毫秒就会被触发一次。 效果实现 获取上传框和预览框元素 const dropZone document.getElementById(drop-zone); const uploadedImage document.getElementById(uploaded-image);图片进入上传框时为上传框加一层灰色蒙层 监听上传框的dragenter事件在图片移动进入上传框时改变上传框的背景颜色。 dropZone.addEventListener(dragenter, function (event) {dropZone.style.backgroundColor #f7f7f7; });图片离开上传框时去除上传框的灰色蒙层 监听上传框的dragleave事件在图片移出上传框时去除上传框的背景颜色。 dropZone.addEventListener(dragleave, function (event) {dropZone.style.backgroundColor ; });阻止浏览器默认行为例如打开文件 dragover和drop事件都会触发浏览器打开文件我们需要阻止其默认行为。 dropZone.addEventListener(dragover, function (event) {event.preventDefault(); }); dropZone.addEventListener(drop, function (event) {event.preventDefault(); });获取拖拽上传的文件 拖拽释放会触发drop事件我们只需要监听drop事件获取到拖拽的文件列表event.dataTransfer.files即可。 dropZone.addEventListener(drop, function (event) {event.preventDefault();dropZone.style.backgroundColor ;const file event.dataTransfer.files[0];handleFile(file); });处理上传文件为图片时设置预览图 判断上传的文件是否为图片我们只需要判断上传文件的type是否为image开头是的话我们可以将其转为dataUrl文件并设置预览。 function handleFile(file) {if (file file.type.startsWith(image/)) {const reader new FileReader();reader.onload function (event) {uploadedImage.src event.target.result;};reader.readAsDataURL(file);}}封装为vue组件 知道了原生js实现一个拖拽上传功能之后我们也能很容易得将其封装成一个vue组件。 监听拖拽事件 在vue中我们直接通过dragover、dragleave、drop即可监听元素的拖拽事件。 divclassupload-areadragover.preventhandleDragOverdragleavehandleDragLeavedrop.preventhandleDropclickhandleUploadClick p v-if!isDragging classtip-text{{ tipText }}/pp v-else{{ tipConfirmText }}/p /div事件的处理逻辑和原生js其实都是一样的。 methods: {handleDragOver(event) {event.preventDefault();this.isDragging true;},handleDragLeave() {this.isDragging false;},handleDrop(event) {event.preventDefault();this.isDragging false;const file event.dataTransfer.files[0];this.uploadFile(file);} }获取到上传文件并传递给父组件 获取到上传的文件后我们不应该组件内直接处理文件了将其传递给父组件进行处理即可。 uploadFile(file) {this.$emit(uploadFile, file); }组件完整代码 功能逻辑与原生JavaScrip基本相同这里也不重复描述了直接看代码吧 templatediv classdrag-uploaddivclassupload-areadragover.preventhandleDragOverdragleavehandleDragLeavedrop.preventhandleDropclickhandleUploadClickp v-if!isDragging classtip-text{{ tipText }}/pp v-else{{ tipConfirmText }}/p/divinputtypefilereffileInputstyledisplay: nonechangehandleFileSelected//div /templatescript export default {name: JDragUpload,props: {tipText: {type: String,default: 将文件拖放到此处或点击上传,},tipConfirmText: {type: String,default: 释放文件以上传,},},data() {return {isDragging: false,};},methods: {handleDragOver(event) {event.preventDefault();this.isDragging true;},handleDragLeave() {this.isDragging false;},handleDrop(event) {event.preventDefault();this.isDragging false;const file event.dataTransfer.files[0];this.uploadFile(file);},handleUploadClick() {this.$refs.fileInput.click();},handleFileSelected() {const file this.$refs.fileInput.files[0];this.uploadFile(file);},uploadFile(file) {this.$emit(uploadFile, file);},}, }; /scriptstyle langless scoped .drag-upload {display: flex;align-items: center;justify-content: center;height: 100%;width: 100%;border: 2px dashed #ccc;.upload-area {display: flex;align-items: center;justify-content: center;height: 100%;width: 100%;background-color: #f0f0f0;cursor: pointer;.tip-text {text-align: center;}} } /style源码 组件体验及文档地址http://jyeontu.xyz/jvuewheel/#/JDragUploadView Gitee源码https://gitee.com/zheng_yongtao/jyeontu-component-warehouse/tree/master/JYeontuComponentWarehouse/packages/JDragUpload 说在后面 这里是 JYeontu现在是一名前端工程师有空会刷刷算法题平时喜欢打羽毛球 平时也喜欢写些东西既为自己记录 也希望可以对大家有那么一丢丢的帮助写的不好望多多谅解 写错的地方望指出定会认真改进 偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章有兴趣的也可以关注下。在此谢谢大家的支持我们下文再见 。
http://www.hkea.cn/news/14273936/

相关文章:

  • 网站建设方案 百度文库国外做蛋糕网站
  • 自己怎么做个网站南京房地产网站建设
  • 国内建站 wordpress预约做家庭清洁的网站
  • 网站怎么设置关键词邢台网站开发
  • 装置艺术那个网站做的好六盘水遵义网站建设怎么做
  • 做ppt图片用的网站有哪些网站设计好以后怎么上线
  • 美容评测网站建设分析报告广州注册公司代理公司
  • 潍坊市建设局网站成都装修建材网站建设
  • 网站开发浏览器分辨率网站建设 招标公告
  • 关于企业网站建设数据现状分析做相亲网站赚钱吗
  • 天津网站建设制作价格网站建设项目需求分析
  • 旅游景区网站开发的政策可行性我朋友是做卖网站的
  • 网上做头像用什么网站wordpress表结构怎么样
  • 上海网站建设小程序制作旅游网站网页的代码
  • 网站建设基本流程图彩票源码论坛
  • 想自己做个网站在哪里做西安旅游攻略自由行
  • 做网站总结体会做网赌网站怎么推广拉人
  • 网站数据库怎么做怎么看网站建设时间
  • 网站内容建设要求 age06如何建立外贸网站
  • 电子商务网站系统开发花店网页设计代码
  • 网站毕业设计开题报告网站如何优化一个关键词
  • 徐州做网站的培训机构百度指数代表什么
  • 反邪手机网站建设方案廊坊网站建设选择青橙网络
  • 查询网站入口温州企业网站建设服务
  • wordpress前端可视化编辑优化师证书
  • 网站建设宣传psduc wordpress
  • 楚天网站建设合同网站建设中最重要的环节是
  • 网站公司服务器可做域名空间网站友情链接的好处
  • 福永自适应网站建设做企业网站用php
  • 中山建设网站公司win2003 iis做网站