//脚本目的是为了将一个id为”item“的div放入另一个id为”drop“的div里。问题写在备注里
//其实就差一个比较关键的,dataTransfer.dropEffect='copy'它的作用是什么啊
//事件监听器
function listener(eventTarget,eventTpye,handler){
if(eventTarget.addEventListener){
eventTarget.addEventListener(eventType,handler,false)
}else if(eventTarget.attachEvent){
eventType="on"+eventType;
eventTarget.attachEvent(eventType,handler)
}else{
eventTarget["on"+eventType]=handler}
}
//取消事件
function cancelEvent(event){
if(event.preventDefault){
event.preventDefault()
}else{
event.returnValue=false
}
}
//取消传递
function cancelPropagation(event){
if(event.stopPropagation){
event.stopPropagation()
}else{
event.cancelBubble=true
}
}
//启动拖拽
var item=document.getElementById("item");
item.setAttribute("draggable","true");
function dragStart(evt){
evt=evt||window.event;//为什么用evt而不直接写dragstart(event)
evt.dataTransfer.effectAllowed="copy"//evt.dataTransfer.effectAllowedd的值 “none”、“copy”、“copyLink”、“copyMove”、“link”、“linkMove”、“move”、“all”分别是什么作用?
evt.dataTransfer.setData("Text",item.id)//evt.dataTransfer.setData(format,data)中,data是不是指数据的内容,比如evt.dataTransfer.setData("Text",item.id)这句话就是把item元素的id复制到粘贴板上以进行下一步调用?
//放下
function Drop(evt){
evt=evt||window.event;
evt.dataTransfer.dropEffect="copy";
var id =evt.dataTransfer.getData("Text");//getData()方法是将粘贴板上的一类数据获得,此句作用应该是将item的ID赋值给id变量一遍调用
target.appendChild(document.getElemntById(id));//这里target是否是默认的event.target
}
//取消拖动反馈
function dragOver(evt){
if(evt.preventDefault)evt.preventDefault
evt=evt||window.event;
evt.dataTransfer.dropEffect="copy";//书上说拖动需要取消被放置元素的dragover事件,那么直接if语句和return false不就好了,为什么要多这一行。
//evt.dataTransfer.dropEffect=”copy“是什么作用是当元素拖动并放下时,将粘贴板里的内容复制到被拖动的元素吗?如果是,假如粘贴板内容很多,又是怎么对粘贴内容进行选择的呢。
return false;
}
//监听安置
window.onload=function(){
var target=document.getElementById("drop");
listener(target,"dragenter",cancelEvent);
listener(target,"dragover",dragOver);
listener(target,"drop",Drop);
listener(item,"dragstart",dragStart)
}
}
//其实就差一个比较关键的,dataTransfer.dropEffect='copy'它的作用是什么啊
//事件监听器
function listener(eventTarget,eventTpye,handler){
if(eventTarget.addEventListener){
eventTarget.addEventListener(eventType,handler,false)
}else if(eventTarget.attachEvent){
eventType="on"+eventType;
eventTarget.attachEvent(eventType,handler)
}else{
eventTarget["on"+eventType]=handler}
}
//取消事件
function cancelEvent(event){
if(event.preventDefault){
event.preventDefault()
}else{
event.returnValue=false
}
}
//取消传递
function cancelPropagation(event){
if(event.stopPropagation){
event.stopPropagation()
}else{
event.cancelBubble=true
}
}
//启动拖拽
var item=document.getElementById("item");
item.setAttribute("draggable","true");
function dragStart(evt){
evt=evt||window.event;//为什么用evt而不直接写dragstart(event)
evt.dataTransfer.effectAllowed="copy"//evt.dataTransfer.effectAllowedd的值 “none”、“copy”、“copyLink”、“copyMove”、“link”、“linkMove”、“move”、“all”分别是什么作用?
evt.dataTransfer.setData("Text",item.id)//evt.dataTransfer.setData(format,data)中,data是不是指数据的内容,比如evt.dataTransfer.setData("Text",item.id)这句话就是把item元素的id复制到粘贴板上以进行下一步调用?
//放下
function Drop(evt){
evt=evt||window.event;
evt.dataTransfer.dropEffect="copy";
var id =evt.dataTransfer.getData("Text");//getData()方法是将粘贴板上的一类数据获得,此句作用应该是将item的ID赋值给id变量一遍调用
target.appendChild(document.getElemntById(id));//这里target是否是默认的event.target
}
//取消拖动反馈
function dragOver(evt){
if(evt.preventDefault)evt.preventDefault
evt=evt||window.event;
evt.dataTransfer.dropEffect="copy";//书上说拖动需要取消被放置元素的dragover事件,那么直接if语句和return false不就好了,为什么要多这一行。
//evt.dataTransfer.dropEffect=”copy“是什么作用是当元素拖动并放下时,将粘贴板里的内容复制到被拖动的元素吗?如果是,假如粘贴板内容很多,又是怎么对粘贴内容进行选择的呢。
return false;
}
//监听安置
window.onload=function(){
var target=document.getElementById("drop");
listener(target,"dragenter",cancelEvent);
listener(target,"dragover",dragOver);
listener(target,"drop",Drop);
listener(item,"dragstart",dragStart)
}
}