亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dragdrop.js

?? ajax+asp在線聊天,非常小巧,適合大部分地方使用.
?? JS
?? 第 1 頁 / 共 2 頁
字號:
// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
// 
// See scriptaculous.js for full license.

/*--------------------------------------------------------------------------*/

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || {});

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if((typeof containment == 'object') && 
        (containment.constructor == Array)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }
    
    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },
  
  findDeepestChild: function(drops) {
    deepest = drops[0];
      
    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];
    
    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode; 
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },
  
  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect( 
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var affected = [];
    
    if(this.last_active) this.deactivate(this.last_active);
    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });
        
    if(affected.length>0) {
      drop = Droppables.findDeepestChild(affected);
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
      
      Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) 
        this.last_active.onDrop(element, this.last_active.element, event);
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
}

var Draggables = {
  drags: [],
  observers: [],
  
  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
      
      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(document, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },
  
  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },
  
  activate: function(draggable) {
    window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
    this.activeDraggable = draggable;
  },
  
  deactivate: function() {
    this.activeDraggable = null;
  },
  
  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;
    this.activeDraggable.updateDrag(event, pointer);
  },
  
  endDrag: function(event) {
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },
  
  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },
  
  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },
  
  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },
  
  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
  },
  
  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
}

/*--------------------------------------------------------------------------*/

var Draggable = Class.create();
Draggable.prototype = {
  initialize: function(element) {
    var options = Object.extend({
      handle: false,
      starteffect: function(element) {
        element._opacity = Element.getOpacity(element); 
        new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
      },
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
      },
      endeffect: function(element) {
        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity}); 
      },
      zindex: 1000,
      revert: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false   // false, or xy or [x,y] or function(x,y){ return [x,y] }
    }, arguments[1] || {});

    this.element = $(element);
    
    if(options.handle && (typeof options.handle == 'string')) {
      var h = Element.childrenWithClassName(this.element, options.handle, true);
      if(h.length>0) this.handle = h[0];
    }
    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;
    
    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML)
      options.scroll = $(options.scroll);

    Element.makePositioned(this.element); // fix IE    

    this.delta    = this.currentDelta();
    this.options  = options;
    this.dragging = false;   

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);
    
    Draggables.register(this);
  },
  
  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },
  
  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },
  
  initDrag: function(event) {
    if(Event.isLeftClick(event)) {    
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if(src.tagName && (
        src.tagName=='INPUT' ||
        src.tagName=='SELECT' ||
        src.tagName=='OPTION' ||
        src.tagName=='BUTTON' ||
        src.tagName=='TEXTAREA')) return;
        
      if(this.element._revert) {
        this.element._revert.cancel();
        this.element._revert = null;
      }
      
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
      
      Draggables.activate(this);
      Event.stop(event);
    }
  },
  
  startDrag: function(event) {
    this.dragging = true;
    
    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }
    
    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }
    
    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }
    
    Draggables.notify('onStart', this, event);
    if(this.options.starteffect) this.options.starteffect(this.element);
  },
  
  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);
    Position.prepare();
    Droppables.show(pointer, this.element);
    Draggables.notify('onDrag', this, event);
    this.draw(pointer);
    if(this.options.change) this.options.change(this);
    
    if(this.options.scroll) {
      this.stopScrolling();
      
      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft;
        p[1] += this.options.scroll.scrollTop;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }
    
    // fix AppleWebKit rendering
    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
    
    Event.stop(event);
  },
  
  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.ghosting) {
      Position.relativize(this.element);
      Element.remove(this._clone);
      this._clone = null;
    }

    if(success) Droppables.fire(event, this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && typeof revert == 'function') revert = revert(this.element);
    
    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      this.options.reverteffect(this.element, 
        d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect) 
      this.options.endeffect(this.element);

    Draggables.deactivate(this);
    Droppables.reset();
  },
  
  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },
  
  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },
  
  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];
    
    if(this.options.scroll && (this.options.scroll != window)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }
    
    var p = [0,1].map(function(i){ 
      return (point[i]-pos[i]-this.offset[i]) 
    }.bind(this));
    
    if(this.options.snap) {
      if(typeof this.options.snap == 'function') {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(this.options.snap instanceof Array) {
        p = p.map( function(v, i) {
          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
      } else {
        p = p.map( function(v) {
          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
      }
    }}
    
    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";
    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },
  
  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },
  
  startScrolling: function(speed) {
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },
  
  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲美女区一区| 91精彩视频在线观看| 成人av动漫网站| 欧美一区二区三区成人| 欧美国产精品一区二区| 久久国产精品无码网站| 91福利国产精品| 中文字幕中文乱码欧美一区二区| 日本欧美大码aⅴ在线播放| 91片黄在线观看| 欧美极品aⅴ影院| 国内精品国产三级国产a久久 | 欧美一二区视频| 亚洲激情欧美激情| 高清在线观看日韩| 久久蜜桃av一区精品变态类天堂 | 欧美福利电影网| 一区二区三区国产| 91麻豆国产香蕉久久精品| 国产欧美日韩精品一区| 国产一区二区三区黄视频| 欧美一区二区视频在线观看2022| 亚洲精品国产无套在线观| 成人在线综合网| 中文字幕 久热精品 视频在线| 极品少妇xxxx精品少妇| 精品剧情在线观看| 麻豆国产91在线播放| 欧美大片一区二区三区| 毛片不卡一区二区| 精品日韩成人av| 国产一区二区三区综合| 国产免费观看久久| a亚洲天堂av| 夜夜操天天操亚洲| 欧美久久久久久蜜桃| 日韩精品高清不卡| 亚洲精品在线观看视频| 国产精品亚洲专一区二区三区 | 亚洲色图欧美在线| 色哟哟一区二区| 婷婷综合另类小说色区| 日韩一区二区三区在线| 极品少妇一区二区| 中文字幕免费不卡在线| 在线欧美一区二区| 亚洲chinese男男1069| 日韩一区二区三区精品视频| 韩国一区二区视频| 亚洲青青青在线视频| 欧美午夜一区二区三区| 日本少妇一区二区| 国产午夜精品美女毛片视频| 色噜噜狠狠成人中文综合| 日本不卡一二三区黄网| 久久久欧美精品sm网站 | 韩国三级在线一区| 国产无遮挡一区二区三区毛片日本| 国产成人av自拍| 亚洲欧美日韩精品久久久久| 欧美精品少妇一区二区三区| 国产精品白丝av| 亚洲午夜视频在线| 欧美精品一区视频| 91精品福利视频| 韩日精品视频一区| 亚洲国产精品一区二区www在线| 91麻豆精品久久久久蜜臀 | 中文字幕高清一区| 欧美日本一区二区| 国产精品系列在线播放| 亚洲午夜电影网| 国产精品蜜臀在线观看| 日韩一二三区视频| 色婷婷综合久久久久中文一区二区| 青青草成人在线观看| 亚洲视频一区二区免费在线观看| 日韩天堂在线观看| 91黄色小视频| av色综合久久天堂av综合| 精品综合免费视频观看| 亚洲成人自拍偷拍| 一片黄亚洲嫩模| 国产欧美一区二区三区网站| 91精品国产一区二区三区蜜臀| 色综合亚洲欧洲| 国产成人精品网址| 老司机午夜精品99久久| 亚洲国产三级在线| 亚洲日本青草视频在线怡红院| 久久毛片高清国产| 精品欧美一区二区久久| 亚洲乱码国产乱码精品精的特点 | 丁香六月综合激情| 激情欧美一区二区三区在线观看| 午夜精品影院在线观看| 亚洲男人的天堂av| 国产精品视频第一区| 国产亚洲精品aa午夜观看| 日韩欧美一区二区不卡| 欧美丰满美乳xxx高潮www| 在线观看成人免费视频| 91碰在线视频| 色综合一个色综合亚洲| 一本色道久久综合亚洲aⅴ蜜桃 | 黄网站免费久久| 蜜桃久久精品一区二区| 欧美aaaaaa午夜精品| 亚洲狠狠爱一区二区三区| 一区二区欧美在线观看| 亚洲欧美偷拍卡通变态| 国产精品电影一区二区| 欧美国产一区二区在线观看| 久久精品一级爱片| 国产欧美日韩麻豆91| 国产精品久久99| 最新国产精品久久精品| 国产精品久久久久影院老司| 国产精品久久久久影视| 国产精品美女久久久久久久| 中文字幕一区不卡| 亚洲视频一区二区在线| 亚洲成人一区在线| 日韩av中文在线观看| 日韩国产欧美三级| 国内成+人亚洲+欧美+综合在线| 国产成人日日夜夜| 91免费版在线| 欧美精品久久久久久久久老牛影院| 911国产精品| 久久综合中文字幕| 中文字幕av资源一区| 成人午夜av在线| 色综合天天综合在线视频| 在线亚洲一区二区| 欧美一区二区三区四区高清| 久久这里只有精品首页| 国产精品久久久久久久久搜平片| 自拍偷拍欧美激情| 日韩影视精彩在线| 国产超碰在线一区| 欧美色综合天天久久综合精品| 在线不卡免费av| 久久精品一区八戒影视| 亚洲尤物视频在线| 久久精品国产精品亚洲综合| 成人app软件下载大全免费| 欧美色图在线观看| 久久亚洲捆绑美女| 亚洲一区二区三区中文字幕| 精品一区二区免费在线观看| 成人性生交大片免费看中文 | 成人sese在线| 6080yy午夜一二三区久久| 国产色产综合产在线视频| 亚洲精品成a人| 国产精品中文字幕日韩精品| 精品视频一区三区九区| 国产精品网曝门| 奇米在线7777在线精品| 色综合色狠狠综合色| 26uuu国产在线精品一区二区| 国内精品久久久久影院色| 在线这里只有精品| 国产日韩欧美精品电影三级在线 | 中文字幕一区二区三区四区不卡 | 亚洲一区二区免费视频| 国产成人综合在线| 欧美一级片在线看| 亚洲午夜免费视频| 99精品偷自拍| 国产日产欧美一区二区视频| 日韩成人dvd| 欧美日韩美少妇| 亚洲欧美视频在线观看视频| 国产精品一区在线观看乱码 | 91成人免费在线视频| 欧美激情在线一区二区| 国内精品伊人久久久久av影院| 欧美人成免费网站| 亚洲最快最全在线视频| 97超碰欧美中文字幕| 国产精品视频第一区| 国产又粗又猛又爽又黄91精品| 欧美一区二区三区电影| 丝袜美腿亚洲综合| 欧美日韩国产一级二级| 一区二区三区四区中文字幕| 91麻豆swag| 亚洲精选视频在线| 色久综合一二码| 亚洲激情图片小说视频| 91网站最新网址| 中文字幕一区二区三区不卡| 丁香天五香天堂综合| 国产精品美女久久久久久久久 | 国产乱子轮精品视频| 日韩免费观看2025年上映的电影| 日韩成人伦理电影在线观看| 欧美剧情电影在线观看完整版免费励志电影|