首页 > 编程语言 >直播软件开发,JavaScript HTML5 dom,图片拖拽上传功能

直播软件开发,JavaScript HTML5 dom,图片拖拽上传功能

时间:2023-09-11 14:11:36浏览次数:61  
标签:元素 dataTransfer dom JavaScript item HTML5 file draged 拖拽

直播软件开发,JavaScript HTML5 dom,图片拖拽上传功能

 

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.box{
display: flex;
width: 100%;
justify-content: center;
margin-top: 300px;
align-items: center;
}
#drag{
width: 200px;
height: 200px;
display: flex;
justify-content: center;
border-radius: 10px;
align-items: center;

}
#draged{
width: 400px;
height: 400px;
/* border: 4px pink; */
border-style: dashed;
margin-left: 100px;
border-radius: 10px;
/* border: 4px dashed #AAAAAA; */
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
overflow-x: hidden;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}
/* 隐藏滚动条 */
#draged::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
#draged::before{
content: '请拖拽到此处';
color: #AAAAAA;
position: absolute;
z-index: -1;
}
#draged img {
width: 50%;
height: 50%;
object-fit: contain;
margin-top: 20px;
}
.dragover{
border: 4px orangered;
}
.dropSucess{
border: 4px green;
}
</style>
</head>
<body>
<div class="box">
<!-- 可拖拽元素 ,img元素和超链接a标签,默认允许拖放,可定义draggable,可以不定义draggable-->
<div id="drag" draggable="true" class="drag">可拖拽元素</div>
<!-- 必须阻止默认事件,因为浏览器对拖拽事件的默认处理方式是禁止拖拽 -->
<!-- ondrag 是拖拽开始,可存放拖拽数据,列如元素,class,id等 -->
<!-- ondragover是元素进入放置区域,可进行更改样式等操作 -->
<!-- ondrop元素放置时的事件,可以对元素进行真实的移动操作 -->
<!-- 可放置区域,存放可拖拽的元素, -->
<div  id="draged" class=""></div>
<input id="upload" type="file" value="file"/>
</div>
<script type="text/javascript">
const drag = document.getElementById('drag')
const draged = document.getElementById('draged')
/*
拖动事件
可拖动元素可以触发的:
dragstart:鼠标点中元素并且开始移动时触发
drag:拖拽过程中持续触发
dragend:拖拽结束松开鼠标时触发
当可拖拽元素到某个目标元素时,目标元素会触发的:
dragenter:拖拽元素到目标上时触发
dragover:拖动元素在目标元素中,持续触发
dragleave:离开目标元素时触发
drop:拖放元素到了目标元素中松开鼠标时触发
e.preventDefault(); 每个动作内部必须,写入这个,防止默认事件的产生。
拖拽事件中会初始化一个dataTransfer对象,用于保存拖拽数据和交互信息,在进行拖放操作
的时候,dataTransfer对象可以用来保存被拖动的数据。
他可以保存一项或多项数据,一种或多种数据类型,就是可以通过它来传输被拖动的数据。
以便在拖拽结束的时候,对拖拽数据进行其他操作。
clearData方法可以用来清除dataTransfer对象内的数据,可以指定删除特定格式的数据,
如果不指定格式,则默认删除所有携带的数据。
setData 方法在拖拽开始的时候向dataTransfer存放数据,用types属性来指定数据的MIME类型
getData 方法返回指定数据,如果数据不存在,返回空字符串,getData方法在拖动
结束时读取dataTransfer对象中的数据。
setDragimage(Element image,x,y):制定拖拽元素时跟随鼠标移动的图片,
x,y分别代表相对鼠标的坐标。
*/
// 拖拽开始
drag.addEventListener('dragstart',handleDragStart)
function handleDragStart(e){
//text/plain,imgage/png,等等类型 e.target.id 存放的值
e.dataTransfer.setData('text/plain',e.target.id)
}
//拖拽结束事件
draged.addEventListener('dragover',handleDrageover)
function handleDrageover(e){
// 阻止默认事件。不要让浏览器默认事件来干扰。拖拽操作
e.preventDefault()
draged.classList.add('dragover')
}
// 拖拽离开事件
draged.addEventListener('dragleave',handleDragLeave)
function handleDragLeave(e){
e.preventDefault()
draged.classList.remove('dragover')
}
// 拖拽释放
draged.addEventListener('drop',handleDrop)
function handleDrop(e){
e.preventDefault()
// 将dom元素拖拽进可放置区域
// const draggedId = e.dataTransfer.getData('text/plain')  //标注: 拖拽dom元素
// draged.appendChild(document.getElementById('drag'))    //标注: 拖拽dom元素
draged.classList.add('dropSucess')
// console.log(...e.dataTransfer.items)
// 拖拽也支持外部拖拽文件,图片进来,可以在该事件中监听,
// 如果是拖拽文件需要注释上面 “标注:拖拽dom元素” 两行代码,如果拖拽dom,注释下面文件拖拽上传代码
// 遍历e.dataTransfer.items 属性去做操作
// ...e.dataTransfer.items 可能为空,做一个判空处理
if([...e.dataTransfer.items]){
// 拖拽文件,解构成数组,如果是多个需要遍历,所以调用forEach
[...e.dataTransfer.items].forEach(item=>{
// 如果拖拽进来的是文件夹
let Directory = item.webkitGetAsEntry()
if(Directory.isDirectory) {
console.log('这是一个文件夹')
}
console.log(Directory);
// 通过kind属性判断拖拽进来的是不是文件
if(item.kind === 'file') {
const file = item.getAsFile()
//createPreview 生成预览,比如判断图片
Preview(file)
}
})
}
}
// 图片处理
function Preview(file){
// 如果是图片类型的文件
if(file.type.startsWith('image')){
// 创建一个图片元素
const image = document.createElement('img')
// 根据文件对象创建一个ObjectURL,用作src属性
image.src = URL.createObjectURL(file)
// 图片加载成功过后,ObjectURL就没有用了,就回收这个ObjectURL
file.onload = function(){
URL.revokeObjectURL(this.src)
}
// 把图片追加到可放置区域
draged.appendChild(image)

}
// 文件上传功能学习中,以下代码无效
async function dirReader(item){
let res = []
let internalProces = (item,path,res)=>{
if(item.isFile){
item.file(file=>{
file.path = path + file.name
let newFile = new File([file],file.path,{type:file.type})
res.push(newFile)
})
}  else if(item.isDirectory) {
let fileReader = file.createReader()
fileReader.readEntries(entries =>{
for(let i = 0; i < entries.length; i++){
internalProces(entries[i],path+item.name+"/",res)
}
})
}
}
await internalProces(item,'',res)
// console.log(res)
return res
}
</script>
</body>
</html>

以上就是 直播软件开发,JavaScript HTML5 dom,图片拖拽上传功能,更多内容欢迎关注之后的文章

 

标签:元素,dataTransfer,dom,JavaScript,item,HTML5,file,draged,拖拽
From: https://www.cnblogs.com/yunbaomengnan/p/17693379.html

相关文章

  • 无涯教程-JavaScript - FVSCHEDULE函数
    描述FVSCHEDULE函数在应用一系列复合利率后返回初始本金的未来值。使用FVSCHEDULE以可变或可调汇率计算投资的未来价值。语法FVSCHEDULE(principal,schedule)争论Argument描述Required/OptionalPrincipalThepresentvalue.RequiredScheduleAnarrayofinterest......
  • DOMPurify 使用方法,如何安全地操作DOM |.sanitize()|.innerHTML|TypeScript TS
    DOMPurify是一个仅限DOM的,超快速的,超级宽容的XSS清理器,用于HTML,MathML和SVG。它也非常简单易用和入门。DOMPurify于2014年2月启动,同时已达到v3.0.5版本。DOMPurify是用JavaScript编写的,适用于所有现代浏览器(Safari(10+),Opera(15+),Edge,Firefox和Chrome-以及几乎所有使用Blink,Gecko......
  • HTML5(H5)新特性
    HTML5(H5)是HTML标准的第五个版本,引入了许多新特性和改进,以下是一些H5的新特性:语义化标签:H5引入了一系列新的语义化标签,如<header>、<footer>、<nav>、<article>等,有助于更清晰地描述页面结构和内容。视频和音频支持:H5提供了<video>和<audio>标签,可以直接在网页中嵌入视频和音......
  • HTML5 Canvas 数据持久化存储之属性列表
    正常我们设置属性的时候,属性和属性值的keyvalue对应,但是在实际开发中,经常遇到属性值可能需要从多项中选择,这个时候用原生的HTML5配合JavaScript来实现这个功能会让人非常头疼,我试着用 HTforWeb 来实现了这个功能,感觉整体实践起来还是比较容易的,所以在这边跟大家分享一......
  • mybatisplus中设置乐观锁,首先需要在表结构中添加一个字段表示乐观锁,之后再domain中对
    2023-09-10version字段表示乐观锁 在表结构中添加一个字段表示乐观锁packagecom.hh.domain;importcom.baomidou.mybatisplus.annotation.TableLogic;importcom.baomidou.mybatisplus.annotation.TableName;importcom.baomidou.mybatisplus.annotation.Version;impo......
  • JavaScript Map 对象的用法
    JavaScript的Map对象是一种用于存储键值对的集合,其中键和值可以是任意类型的。Map对象提供了一组方法用于操作和遍历这些键值对。下面是一些常用的JavaScriptMap对象的用法:创建一个新的Map对象:varmap=newMap();添加键值对到Map对象中:map.set(key,value);获取指定键......
  • 无涯教程-JavaScript - DISC函数
    描述DISC函数返回有价证券的折现率。语法DISC(settlement,maturity,pr,redemption,[basis])争论Argument描述Required/OptionalSettlement证券的结算日期。证券结算日期是指在发行日期之后将证券交易给买方的日期。RequiredMaturity证券的到期日。到期日......
  • 无涯教程-JavaScript - DDB函数
    描述DDB函数使用双倍余额递减法或您指定的某些其他方法返回指定期间内资产的折旧。语法DDB(cost,salvage,life,period,[factor])争论Argument描述Required/OptionalCostTheinitialcostoftheasset.RequiredSalvage折旧结束时的价值(有时称为资产的残值)......
  • JavaScript:逻辑运算符
    与(&&)、或(||)&&在JavaScript中,A&&B是一个逻辑与运算,其执行逻辑如下:如果表达式A的结果为假值(例如false、null、undefined、0、NaN或空字符串""),则整个表达式A&&B立即返回A的值,而不会继续执行B。如果表达式A的结果为真值(例如非空字符串、非零数值、对象或函......
  • 无涯教程-JavaScript - DB函数
    描述DB函数使用固定余额递减法返回指定期间内资产的折旧。语法DB(cost,salvage,life,period,[month])争论Argument描述Required/OptionalCostTheinitialcostoftheasset.RequiredSalvageThevalueattheendofthedepreciation(sometimescalledthe......