HTML and CSS Reference
In-Depth Information
For the rest of this chapter I will be using Firefox to test the application. Chrome also supports DnD
but has a bug that won't allow you to access the dataTransfer object except in the drag event (see this article for
details - https://bugs.webkit.org/show_bug.cgi?id=23695 ) . opera will also work fine but IE9 doesn't support
DnD at all.
Note
Allowing a Drop
You have draggable elements and all you need to complete a drag and drop operation is an element that will
accept a drop. To do that you'll need an event handler for the dragover event that sets the drop effect. By default
the effectAllowed property is set to all so setting the drop effect to move, copy, or link will all be valid settings. To
try this out, add a script element at the end of the body element and add the code shown in Listing 14-4.
Listing 14-4. The initial event implementation
<script type="text/javascript">
// Get all the black squares
var squares = document.querySelectorAll('.bblack');
var i = 0;
while (i < squares.length) {
var s = squares[i++];
// Add the event listeners
s.addEventListener('dragover', dragOver, false);
}
// Handle the dragover event
function dragOver(e) {
if (e.preventDefault) {
e.preventDefault();
}
e.dataTransfer.dropEffect = "move";
}
</script>
This code uses the querySelectorAll() function that I described in Chapter 5 to get all of the black squares.
It then iterates through the collection that is returned and adds an event handler for the dragover event. The
dragover() function calls the preventDefault() function to cancel the browser's default action. It then gets the
dataTransfer object and sets the dropEffect property to “move”.
Press F5 to run the application and try dragging a checker. You should now get a move cursor on all the black
squares but a not allowed cursor on the white squares. Try dropping the checker on an empty black square. Since
you have not yet implemented a drop event handler the browser will execute its default drop action. Since the
item being dragged is an image, the default action is to navigate to the image file.
Performing the Custom Drop Action
The default action is not what we're looking for here so we'll need to implement the drop event hander and
provide our own logic. The drop event handler is where all the real work happens. This is where the file is deleted
if it's a trash can. For this application, the drop action will create a new img element at the target location and
remove the previous image.
 
 
Search WWH ::




Custom Search