| <!DOCTYPE html> |
| <html> |
| <meta name="viewport" content="width=device-width"> |
| <head> |
| <style> |
| body { |
| width: 100%; |
| height: 100%; |
| margin: 0; |
| } |
| |
| img { |
| width: 100px; |
| height: 100px; |
| } |
| |
| #target1 { |
| left: 0; |
| top: 200px; |
| } |
| |
| #target2 { |
| left: 200px; |
| top: 0; |
| } |
| |
| #target3 { |
| left: 200px; |
| top: 200px; |
| } |
| |
| .target { |
| position: absolute; |
| background-color: red; |
| border-radius: 50%; |
| width: 100px; |
| height: 100px; |
| color: white; |
| text-align: center; |
| line-height: 90px; |
| } |
| |
| #description { |
| padding-top: 250px; |
| display: block; |
| } |
| |
| #container { |
| position: relative; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <div id="container"> |
| <img src="apple.gif"></img> |
| <div id="target1" class="target"></div> |
| <div id="target2" class="target"></div> |
| <div id="target3" class="target"></div> |
| <code id="description"> |
| <div>To test this manually, drag the image onto each of the three red circles.</div> |
| <div>Each red circle should turn green upon dragging over it.</div> |
| <div>Upon drop, the text "PASS" should appear in each target.</div> |
| </code> |
| </div> |
| </body> |
| |
| <script> |
| function elementAtMouseEvent(e) { |
| if (window.usePageCoordinates) |
| return document.elementFromPoint(e.pageX - pageXOffset, e.pageY - pageYOffset); |
| return document.elementFromPoint(e.clientX, e.clientY); |
| } |
| |
| function targetAtEvent(e) { |
| let target = elementAtMouseEvent(e); |
| return target && target.classList.contains("target") ? target : null; |
| } |
| |
| function resetTestState() { |
| target1.style.backgroundColor = ""; |
| target2.style.backgroundColor = ""; |
| target3.style.backgroundColor = ""; |
| target1.innerHTML = ""; |
| target2.innerHTML = ""; |
| target3.innerHTML = ""; |
| } |
| |
| document.body.addEventListener("dragstart", resetTestState); |
| document.body.addEventListener("dragenter", event => { |
| let target = targetAtEvent(event); |
| if (target) |
| target.style.backgroundColor = "green"; |
| event.preventDefault(); |
| }); |
| |
| document.body.addEventListener("dragover", event => { |
| let target = targetAtEvent(event); |
| if (target) |
| target.style.backgroundColor = "green"; |
| event.preventDefault(); |
| }); |
| |
| document.body.addEventListener("drop", event => { |
| let target = targetAtEvent(event); |
| if (target) |
| target.innerHTML = `<code>PASS</code>`; |
| event.preventDefault(); |
| }); |
| </script> |
| </html> |