+ -
当前位置:首页 → 问答吧 → dragndrop插件的代码, 看不明白, 高手请指点

dragndrop插件的代码, 看不明白, 高手请指点

时间:2009-08-05

来源:互联网

下面是dragndrop插件的代码, 在IE6(FF正常)下测试, 没有设置html标签样式position和top时出现bug,

           当点击要拖动的层时, 它会先跑到窗口坐标(0,0)处 , 问题出在那里呢? 顺便翻译一下代码最好-_-!!


复制代码
  1. //(function($) {
  2.     $.extend($.fn, {
  3.         getCss: function(key) {
  4.             var v = parseInt(this.css(key));
  5.             if (isNaN(v))
  6.                 return false;
  7.             return v;
  8.         }
  9.     });
  10.     $.fn.Drags = function(opts) {    //定义了一个方法, 叫Drags
  11.         var ps = $.extend({          //对参数扩展
  12.             zIndex: 20,
  13.             opacity: .7,
  14.             handler: null,
  15.             onMove: function() { },
  16.             onDrop: function() { }
  17.         }, opts);
  18.         var dragndrop = {            //方法里的方法, 里面又有两个方法drag, 和drop
  19.             drag: function(e) {
  20.                 var dragData = e.data.dragData;  //dragData是传进来的参数
  21.                 dragData.target.css({
  22.                     left: dragData.left + e.pageX - dragData.offLeft,
  23.                     top: dragData.top + e.pageY - dragData.offTop
  24.                 });
  25.                 dragData.handler.css({ cursor: 'move' });
  26.                 dragData.onMove(e);
  27.             },
  28.             drop: function(e) {
  29.                 var dragData = e.data.dragData;
  30.                 dragData.target.css(dragData.oldCss); //.css({ 'opacity': '' });
  31.                 dragData.handler.css('cursor', dragData.oldCss.cursor);
  32.                 dragData.onDrop(e);
  33.                 $().unbind('mousemove', dragndrop.drag)
  34.                     .unbind('mouseup', dragndrop.drop);
  35.             }
  36.         }
  37.         
  38.         //遍历执行, 并返回
  39.         return this.each(function() {
  40.             var me = this;
  41.             var handler = null;
  42.             if (typeof ps.handler == 'undefined' || ps.handler == null)
  43.                 handler = $(me);
  44.             else
  45.                 handler = (typeof ps.handler == 'string' ? $(ps.handler, this) : ps.handle);
  46.             handler.bind('mousedown', { e: me }, function(s) {
  47.                 var target = $(s.data.e);
  48.                 var oldCss = {};
  49.                 if (target.css('position') != 'absolute') {
  50.                     try {
  51.                         target.position(oldCss);
  52.                     } catch (ex) { }
  53.                     target.css('position', 'absolute');
  54.                 }
  55.                 oldCss.cursor = target.css('cursor') || 'default';
  56.                 oldCss.opacity = target.getCss('opacity') || 1;
  57.                 var dragData = {                                               //初始数据
  58.                     left: oldCss.left || target.getCss('left') || 0,
  59.                     top: oldCss.top || target.getCss('top') || 0,
  60.                     width: target.width() || target.getCss('width'),
  61.                     height: target.height() || target.getCss('height'),
  62.                     offLeft: s.pageX,
  63.                     offTop: s.pageY,
  64.                     oldCss: oldCss,
  65.                     onMove: ps.onMove,
  66.                     onDrop: ps.onDrop,
  67.                     handler: handler,
  68.                     target: target
  69.                 }
  70.                 target.css('opacity', ps.opacity);
  71.                 $().bind('mousemove', { dragData: dragData }, dragndrop.drag)  //事件, 对象属性, 对象方法
  72.                     .bind('mouseup', { dragData: dragData }, dragndrop.drop);
  73.             });
  74.         });
  75.     }
  76. //})(jQuery);
[ 此帖被coolesting在2009-08-06 17:24重新编辑 ]

作者: coolesting   发布时间: 2009-08-05

ok 自己搞定了

// top: oldCss.top || target.getCss('top') || 0,
top: $(this).offset().top;

作者: coolesting   发布时间: 2009-08-06

相关阅读 更多