Javascript代码
- // add event handler
- var addEvent = (function () {
- if (document.addEventListener) {
- return function (el, type, fn) {
- if (el && el.nodeName || el === window) {
- el.addEventListener(type, fn, false);
- } else if (el && el.length) {
- for (var i = 0; i < el.length; i++) {
- addEvent(el[i], type, fn);
- }
- }
- };
- } else {
- return function (el, type, fn) {
- if (el && el.nodeName || el === window) {
- el.attachEvent('on' + type, function () { return fn.call(el, window.event); });
- } else if (el && el.length) {
- for (var i = 0; i < el.length; i++) {
- addEvent(el[i], type, fn);
- }
- }
- };
- }
- })();
- // inner variables
- var dragItems;
- updateDataTransfer();
- var dropAreas = document.querySelectorAll('[droppable=true]');
- // preventDefault (stops the browser from redirecting off to the text)
- function cancel(e) {
- if (e.preventDefault) {
- e.preventDefault();
- }
- return false;
- }
- // update event handlers
- function updateDataTransfer() {
- dragItems = document.querySelectorAll('[draggable=true]');
- for (var i = 0; i < dragItems.length; i++) {
- addEvent(dragItems[i], 'dragstart', function (event) {
- event.dataTransfer.setData('obj_id', this.id);
- return false;
- });
- }
- }
- // dragover event handler
- addEvent(dropAreas, 'dragover', function (event) {
- if (event.preventDefault) event.preventDefault();
- // little customization
- this.style.borderColor = "#000";
- return false;
- });
- // dragleave event handler
- addEvent(dropAreas, 'dragleave', function (event) {
- if (event.preventDefault) event.preventDefault();
- // little customization
- this.style.borderColor = "#ccc";
- return false;
- });
- // dragenter event handler
- addEvent(dropAreas, 'dragenter', cancel);
- // drop event handler
- addEvent(dropAreas, 'drop', function (event) {
- if (event.preventDefault) event.preventDefault();
- // get dropped object
- var iObj = event.dataTransfer.getData('obj_id');
- var oldObj = document.getElementById(iObj);
- // get its image src
- var oldSrc = oldObj.childNodes[0].src;
- oldObj.className += 'hidden';
- var oldThis = this;
- setTimeout(function() {
- oldObj.parentNode.removeChild(oldObj); // remove object from DOM
- // add similar object in another place
- oldThis.innerHTML += '<a id="'+iObj+'" draggable="true"><img src="'+oldSrc+'" /></a>';
- // and update event handlers
- updateDataTransfer();
- // little customization
- oldThis.style.borderColor = "#ccc";
- }, 500);
- return false;
- });
可以看到以上代码并不复杂。开始我们选择所有的可拖放的元素。然后将’dragstart’事件绑定到所有的draggable元素上,这样讲数据设定到dataTransfer对象中。对于所有的droppable区域我们绑定这些事件:’dragover’,'dragleave’和’drop’。针对前两个方法我们执行一个小的CSS自定义来激活drop区域。当我们放置可拖放的元素的时候,我们的脚本会复制可拖放元素并且将它们放置到活动的droppable区域(即相册),并且删除那个dropped元素。最后我们更新事件处理。
广州网站建设,网站建设,广州网页设计,广州网站设计
希望大家喜欢这个HTML5的图片拖放展示效果。



