有两个问题请老师解答一下,谢谢!

有两个问题请老师解答一下,谢谢!

关于H5本地图片拖拽的两个问题,请老师解答一下,谢谢!

添加了ondragleave事件,但是快速拖拽进div内的话,会导致div内的文字交替闪烁,慢慢将图片拖拽进去则不会,该怎么解决?

还有,阻止浏览器在新窗口中打开本地图片事件会失败。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>html5拖拽事件</title>
	<style type="text/css">
		body{
			margin: 0;
		}
		#box{
			width: 300px;
			min-height: 300px;
			border: 2px solid #fce;
			margin: 20px auto 0;
		}
		span{
			width: 300px;
			height: 300px;
			color: #c53;
			font-size: 20px;
			text-align: center;
			display: block;
			line-height: 300px;
		}
	</style>
</head>
<body>
	<div id="box"><span>嗨,图片放这里 o!</span></div>
	<script type="text/javascript">
		document.ondragover=function(e){
			e.preventDefault();
		}
		document.ondrop=function(e){
			//阻止浏览器在新窗口中打开本地图片
			e.preventDefault();
		}

		//目标对象事件
		// var oSpan=document.getElementById("box").getElementsByTagName("span");
		var oSpan=document.querySelector("#box span");
		//拖拽模块
		box.ondragover=function(e){
			e.preventDefault();
			oSpan.style.display="none";
			console.log("over");
		}
		box.ondragleave=function(e){
		    e.preventDefault();
			oSpan.style.display="block";
			console.log("leave");
		}
		box.ondrop=function(e){
			e.preventDefault();
			var imgFiles=e.dataTransfer.files;
			for(var i=0;i<imgFiles.length;i++){
				var imgRead=new FileReader();//文件读取器
				imgRead.readAsDataURL(imgFiles[i]);//要读取的文件对象
				imgRead.onload=function(){
					//console.log(this.result);
					console.log(i+"张图片的数据读取完成");
					var img=new Image();
					img.src=this.result;
					img.style.width="100px";
					img.style.height="100px";
					box.appendChild(img);
				}
			}
		}
		//ondragleave事件会导致div内的文字交替闪烁;且导致阻止浏览器在新窗口打开本地图片失败。该怎么解决?
	</script>
</body>
</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
bbbboom 2019-01-09 17:02:24

代码我测试了,你想实现的效果有些复杂啊

浏览器只能控制不显示图片,可以在设置中选择,但是没有办法实现禁止加载图片。

可以在页面中添加一个图片,设置不允许拖动的属性draggable=false,但是页面之外的图片是控制不了的。

最后一个文字闪烁的情况,可以在ondragleave事件中添加判断,如果box盒子中没有子元素的时候再显示出来

http://img1.sycdn.imooc.com//climg/5c35b81a0001cfaf06640252.jpg

但是这样图片只要一拖进去,再拖出来的时候box盒子子元素长度就不是0。

图片拖进html页面中,是在当前窗口打开的,不是在新窗口打开的啊。

  • 提问者 不安分的魔菇 #1
    对,说错了,图片拖进html页面中是会刷新当前窗口在当前窗口打开。。我想实现,当我图片拖进去但是我没放,又拖出来的时候还是显示提醒:“图片放在这里”。就是当窗口中没有图片的时候,还是显示文字。但是一直实现不了,用dragleave有问题。。你说的判断的这种方法我试了一下,虽然不会闪烁了,但是和不用dragleave方法的效果是一样的。
    2019-01-09 17:34:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
响应式开发与常用框架 2018
  • 参与学习           人
  • 提交作业       2198    份
  • 解答问题       5012    个

如果你有web端基础,既想进阶,又想进军移动端开发,那就来吧,我们专题为你带来的课程有HTML5、CSS3、移动基础、响应式、bootstrap、less等,让你在前端道路上畅通无阻!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师