亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript簡單實現鼠標拖動選擇功能

2019-11-20 20:59:29
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

<style><!--
body{padding-top:50px;padding-left:100px;padding-right:150px;}
  .fileDiv{float:left;width:100px;height:100px;text-align:center;line-height:100px;font-size:12px;border:1px solid #cccccc;margin-right:10px;margin-bottom:10px;}
  .seled{border:1px solid #ff0000;background-color:#D6DFF7;}
--></style>
<script type="text/javascript">// <![CDATA[
Array.prototype.remove = function( item ){
  for( var i = 0 ; i < this.length ; i++ ){
   if( item == this[i] )
    break;
  }
  if( i == this.length )
   return;
  for( var j = i ; j < this.length - 1 ; j++ ){
   this[ j ] = this[ j + 1 ];
  }
  this.length--;
  }

String.prototype.replaceAll = function (AFindText,ARepText){ raRegExp = new RegExp(AFindText,"g"); return this.replace(raRegExp,ARepText);}
 function getAllChildren(e) {
  return e.all ? e.all : e.getElementsByTagName('*');
}

document.getElementsBySelector = function(selector) {
  if (!document.getElementsByTagName) {
    return new Array();
  }
  var tokens = selector.split(' ');
  var currentContext = new Array(document);
  for (var i = 0; i < tokens.length; i++) {
    token = tokens[i].replace(/^/s+/,'').replace(//s+$/,'');;
    if (token.indexOf('#') > -1) {
      var bits = token.split('#');
      var tagName = bits[0];
      var id = bits[1];
      var element = document.getElementById(id);
      if (tagName  &&  element.nodeName.toLowerCase() != tagName) {
        return new Array();
      }
      currentContext = new Array(element);
      continue;
    }
    if (token.indexOf('.') > -1) {

      var bits = token.split('.');
      var tagName = bits[0];
      var className = bits[1];
      if (!tagName) {
        tagName = '*';
      }

      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (found[k].className  &&  found[k].className.match(new RegExp('//b'+className+'//b'))) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue;
    }
    if (token.match(/^(/w*)/[(/w+)([=~/|/^/$/*]?)=?"?([^/]"]*)"?/]$/)) {
      var tagName = RegExp.$1;
      var attrName = RegExp.$2;
      var attrOperator = RegExp.$3;
      var attrValue = RegExp.$4;
      if (!tagName) {
        tagName = '*';
      }
      var found = new Array;
      var foundCount = 0;
      for (var h = 0; h < currentContext.length; h++) {
        var elements;
        if (tagName == '*') {
            elements = getAllChildren(currentContext[h]);
        } else {
            elements = currentContext[h].getElementsByTagName(tagName);
        }
        for (var j = 0; j < elements.length; j++) {
          found[foundCount++] = elements[j];
        }
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      var checkFunction;
      switch (attrOperator) {
        case '=':
          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
          break;
        case '~':
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('//b'+attrValue+'//b'))); };
          break;
        case '|':
          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
          break;
        case '^':
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
          break;
        case '$':
          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
          break;
        case '*':
          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
          break;
        default :
          checkFunction = function(e) { return e.getAttribute(attrName); };
      }
      currentContext = new Array;
      var currentContextIndex = 0;
      for (var k = 0; k < found.length; k++) {
        if (checkFunction(found[k])) {
          currentContext[currentContextIndex++] = found[k];
        }
      }
      continue;
    }
    tagName = token;
    var found = new Array;
    var foundCount = 0;
    for (var h = 0; h < currentContext.length; h++) {
      var elements = currentContext[h].getElementsByTagName(tagName);
      for (var j = 0; j < elements.length; j++) {
        found[foundCount++] = elements[j];
      }
    }
    currentContext = found;
  }
  return currentContext;
}

 function addEvent(eventType,eventFunc,eventObj){
    eventObj = eventObj || document;
    if(window.attachEvent)  eventObj.attachEvent("on"+eventType,eventFunc);
     if(window.addEventListener) eventObj.addEventListener(eventType,eventFunc,false);
  }
function clearEventBubble(evt){
   evt = evt || window.event;
    if (evt.stopPropagation) evt.stopPropagation(); else evt.cancelBubble = true;
     if (evt.preventDefault)  evt.preventDefault();  else evt.returnValue = false;
}

function posXY(event){
 event = event || window.event;
 var posX = event.pageX || (event.clientX +
         (document.documentElement.scrollLeft || document.body.scrollLeft));
 var posY = event.pageY || (event.clientY +
         (document.documentElement.scrollTop || document.body.scrollTop));
 return {x:posX, y:posY};
}

 var _selectedRegions = [];
 function RegionSelect(selRegionProp){
   this.regions =[];
   var _regions = document.getElementsBySelector(selRegionProp["region"]);
   if(_regions  &&  _regions.length > 0){
    var _self = this;
     for(var i=0; i< _regions.length;i++){
       _regions[i].onmousedown = function(){
         var evt = window.event || arguments[0];
         if(!evt.shiftKey  &&  !evt.ctrlKey){
          // 清空所有select樣式
          _self.clearSelections(_regions);
          this.className += " "+_self.selectedClass;
          // 清空selected數組,并加入當前select中的元素
          _selectedRegions = [];
          _selectedRegions.push(this);
         }else{
          if(this.className.indexOf(_self.selectedClass) == -1){
            this.className += " "+_self.selectedClass;
            _selectedRegions.push(this);
          }else{
            this.className = this.className.replaceAll(_self.selectedClass,"");
            _selectedRegions.remove(this);
          }
         }
         clearEventBubble(evt);
       }
       this.regions.push(_regions[i]);
     }
   }
   this.selectedClass = selRegionProp["selectedClass"];
   this.selectedRegion = [];
   this.selectDiv = null;
   this.startX = null;
   this.startY = null;
 }

 RegionSelect.prototype.select = function(){
  var _self = this;
  addEvent("mousedown",function(){
    var evt = window.event || arguments[0];
    _self.onBeforeSelect(evt);
    clearEventBubble(evt);
  },document);

  addEvent("mousemove",function(){
    var evt = window.event || arguments[0];
    _self.onSelect(evt);
    clearEventBubble(evt);
  },document);

  addEvent("mouseup",function(){
    _self.onEnd();
  },document);
 }

 RegionSelect.prototype.onBeforeSelect = function(evt){
  if(!document.getElementById("selContainer")){
     this.selectDiv = document.createElement("div");
     this.selectDiv.style.cssText = "position:absolute;width:0px;height:0px;font-size:0px;margin:0px;padding:0px;border:1px dashed #0099FF;background-color:#C3D5ED;z-index:1000;filter:alpha(opacity:60);opacity:0.6;display:none;";
     this.selectDiv.id = "selContainer";
     document.body.appendChild(this.selectDiv);
   }else{
     this.selectDiv = document.getElementById("selContainer");
   }

   this.startX = posXY(evt).x;
   this.startY = posXY(evt).y;
   this.isSelect = true;

 }

 RegionSelect.prototype.onSelect = function(evt){
    var _self = this;
    if(_self.isSelect){
      if(_self.selectDiv.style.display == "none") _self.selectDiv.style.display = "";

      var posX = posXY(evt).x;
      var poxY = posXY(evt).y;

      _self.selectDiv.style.left   = Math.min(posX, this.startX);
     _self.selectDiv.style.top    = Math.min(poxY, this.startY);
     _self.selectDiv.style.width  = Math.abs(posX - this.startX);
     _self.selectDiv.style.height = Math.abs(poxY - this.startY); 

     var regionList = _self.regions;
     for(var i=0; i< regionList.length; i++){
       var r = regionList[i], sr = _self.innerRegion(_self.selectDiv,r);
       if(sr  &&  r.className.indexOf(_self.selectedClass) == -1){
          r.className = r.className + " "+_self.selectedClass;
          _selectedRegions.push(r);
       }else if(!sr  &&  r.className.indexOf(_self.selectedClass) != -1){
          r.className = r.className.replaceAll(_self.selectedClass,"");
         _selectedRegions.remove(r);
        }

     }
   }
 }

 RegionSelect.prototype.onEnd = function(){
  if(this.selectDiv){
    this.selectDiv.style.display = "none";
  }
  this.isSelect = false;
  //_selectedRegions = this.selectedRegion;
 }

 // 判斷一個區域是否在選擇區內
 RegionSelect.prototype.innerRegion = function(selDiv, region){
   var s_top = parseInt(selDiv.style.top);
   var s_left = parseInt(selDiv.style.left);
   var s_right = s_left + parseInt(selDiv.offsetWidth);
   var s_bottom = s_top + parseInt(selDiv.offsetHeight);

   var r_top = parseInt(region.offsetTop);
   var r_left = parseInt(region.offsetLeft);
   var r_right = r_left + parseInt(region.offsetWidth);
   var r_bottom = r_top + parseInt(region.offsetHeight);

    var t = Math.max(s_top, r_top);
     var r = Math.min(s_right, r_right);
     var b = Math.min(s_bottom, r_bottom);
     var l = Math.max(s_left, r_left);

      if (b > t+5  &&  r > l+5) {
          return region;
      } else {
          return null;
      }

 }

 RegionSelect.prototype.clearSelections = function(regions){
  for(var i=0; i<regions.length;i++){
   regions[i].className = regions[i].className.replaceAll(this.selectedClass,"");
  }
 }

 function getSelectedRegions(){
  return  _selectedRegions;
 }

 function showSelDiv(){
   var selInfo = "";
   var arr = getSelectedRegions();
   for(var i=0; i<arr.length;i++){
       selInfo += arr[i].innerHTML+"/n";
   }

   alert("共選擇 "+arr.length+" 個文件,分別是:/n"+selInfo);

 }
// ]]></script>
<p><button onclick="showSelDiv();">getRegions</button></p>
<div class="fileDiv">file1</div>
<div class="fileDiv">file2</div>
<div class="fileDiv">file3</div>
<div class="fileDiv">file4</div>
<div class="fileDiv">file5</div>
<div class="fileDiv">file6</div>
<div class="fileDiv">file7</div>
<div class="fileDiv">file8</div>
<div style="float: left; width: 100%;"><button onclick="showSelDiv();">getRegions</button></div>
<script type="text/javascript">// <![CDATA[
new RegionSelect({
     region:'div.fileDiv',
     selectedClass: 'seled'
    }).select();
// ]]></script>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇米4444一区二区三区| 国产一区二区欧美日韩| 国产午夜精品全部视频播放| 国产精品日韩欧美大师| 精品久久久中文| 日韩在线观看免费高清完整版| 国产成人福利夜色影视| 亚洲影视中文字幕| 色系列之999| 日韩美女av在线| 国内精品400部情侣激情| 人人澡人人澡人人看欧美| 精品中文字幕久久久久久| 国产aaa精品| 97超级碰在线看视频免费在线看| 日本成人免费在线| 插插插亚洲综合网| 成人网在线免费看| 午夜精品久久久久久久99黑人| 成人综合网网址| 亚洲欧美制服中文字幕| 91高清免费视频| 久久亚洲精品一区二区| 国产精品亚洲一区二区三区| 亚洲女人初尝黑人巨大| 亚洲男人天堂九九视频| 色狠狠av一区二区三区香蕉蜜桃| 亚洲天堂男人的天堂| 国产97在线播放| 亚洲xxxx3d| 日韩av三级在线观看| 欧美日韩成人免费| 亚洲男人的天堂在线播放| 国产美女精品免费电影| 亚洲aa中文字幕| 亚洲国产精品女人久久久| 久久久精品日本| 亚洲视频免费一区| 欧美黑人性视频| 亚洲色无码播放| 91在线免费视频| 91日韩在线视频| 91精品久久久久久久久青青| 91在线视频免费| 中文字幕精品久久久久| 久久久久久久影院| 久久久精品一区| 国产精品久久婷婷六月丁香| 亚洲欧美综合区自拍另类| 中文字幕精品一区二区精品| 亚洲一区中文字幕在线观看| 九九综合九九综合| 国产日韩欧美中文| 国产精品黄色影片导航在线观看| 精品久久久久久久久久久久| 欧洲一区二区视频| 欧美激情a∨在线视频播放| 九九热在线精品视频| 日韩成人在线观看| 久久久人成影片一区二区三区观看| 久久成人精品电影| 国产免费一区二区三区在线能观看| 粉嫩老牛aⅴ一区二区三区| 日韩动漫免费观看电视剧高清| 亚洲精品720p| 国产欧美日韩精品丝袜高跟鞋| 欧美夫妻性生活xx| 久久亚洲精品国产亚洲老地址| 亚洲人成电影网站色…| 国产日韩精品综合网站| 2021国产精品视频| 精品久久久久久国产| 亚洲天堂一区二区三区| 欧美乱妇高清无乱码| 欧美一级淫片播放口| www日韩中文字幕在线看| 亚洲午夜小视频| 日韩**中文字幕毛片| 成人免费网站在线看| 亚洲一区二区久久久久久久| 欧美在线免费看| 欧美一级大片在线观看| 精品国产区一区二区三区在线观看| 大伊人狠狠躁夜夜躁av一区| 日韩美女毛茸茸| 亲子乱一区二区三区电影| 久久好看免费视频| 日韩视频免费观看| 亚洲免费成人av电影| 亚洲欧洲在线看| 亚洲国产精品成人av| 日韩精品福利在线| 激情成人在线视频| 九九久久久久久久久激情| 亚洲欧美日本伦理| 日韩欧美一区二区在线| 亚洲成人精品久久久| 欧美成人性生活| 国产成人精品av在线| 日韩精品中文字幕在线播放| 欧美午夜片在线免费观看| 久久久久久久影院| 国产精品久久久精品| 国产精品视频公开费视频| 国产欧美欧洲在线观看| 亚洲欧洲国产伦综合| 91成人福利在线| 亲爱的老师9免费观看全集电视剧| 国产精品扒开腿做爽爽爽男男| 日韩av综合中文字幕| 久久久精品日本| 成人久久一区二区三区| 午夜精品福利在线观看| 欧美在线一区二区视频| 91精品久久久久久久久久入口| 亚洲黄色www网站| 欧美黑人又粗大| 2019中文字幕在线免费观看| 日本道色综合久久影院| 欧美性猛交xxxx乱大交极品| 黑人巨大精品欧美一区二区| 日韩动漫免费观看电视剧高清| 欧美日韩一二三四五区| 91在线观看欧美日韩| 免费av在线一区| 2023亚洲男人天堂| 亚洲成人精品久久| 久久这里有精品| 91久久久久久久久久久久久| 欧美日韩国产黄| 国产97色在线|日韩| 日韩在线视频导航| 亚洲图片欧美日产| 国产精品电影观看| 国产91在线播放九色快色| 国产欧美日韩精品丝袜高跟鞋| 国产欧美一区二区| 精品视频在线导航| 精品露脸国产偷人在视频| 97人人爽人人喊人人模波多| 26uuu另类亚洲欧美日本老年| 中文字幕在线看视频国产欧美在线看完整| 久久久在线观看| 亚洲国产精品va在线看黑人| 国产成+人+综合+亚洲欧美丁香花| 成人黄色免费片| 国产成人精品优优av| 国产福利精品视频| 91av在线不卡| 最近2019年日本中文免费字幕| 国产成人亚洲综合91精品| 国产精品久久久亚洲| 国产精品欧美激情在线播放| 日韩av免费一区| 国产精品狼人色视频一区| 国产精品久久久久久久久久久久| 欧美成人激情视频| 国产午夜精品一区二区三区| 精品久久久久久久久久ntr影视| 欧美激情免费在线| 亚洲天堂日韩电影| 欧美与欧洲交xxxx免费观看| 日韩av男人的天堂| 亚洲毛片在线免费观看|