0

我正在使用一个名为的库,该库REDIPS可让您创建可自定义且简单的拖放效果....

我正在尝试创建一个函数,该函数导致正在移动的元素被克隆多次并定位到主元素的左侧......

(function() {
  var redipsInit,
      getContent;

  redipsInit = function() {
    var num = 0,
        rd = REDIPS.drag;
    rd.init();
    rd.dropMode = 'single';
    rd.hover.colorTd = 'rgb(62, 255, 110)';
    rd.event.clicked = function() {
      if (rd.obj.id == 'drag-1' || rd.obj.id == 'drag-4') {
        for (var i = 0; i < 1; i++) {
          var mydiv = rd.obj;
          var div = document.createElement("div");
          insertAfter(div, mydiv);
          div.className = rd.obj.className;
          div.style.backgroundColor = rd.obj.style.backgroundColor;
        }
      } else if (rd.obj.id == 'drag-2' || rd.obj.id == 'drag-5' || rd.obj.id == 'drag-9') {
        for (var i = 0; i < 3; i++) {
          var mydiv = rd.obj;
          var div = document.createElement("div");
          insertAfter(div, mydiv);
          div.className = rd.obj.className;
          div.style.backgroundColor = rd.obj.style.backgroundColor;
        }
      }
    };
  }
  getContent = function(id) {
    var td = document.getElementById(id),
        content = '',
        cn, i;
    for (i = 0; i < td.childNodes.length; i++) {
      cn = td.childNodes[i];
      if (cn.nodeName === 'DIV' && cn.className.indexOf('drag') > -1) {
        content += cn.id + '_';
      }
    }
    content = content.substring(0, content.length - 1);
    return content;
  };

  teste = function() {
    var k = 1;
    var tabela = '';
    tabela = '<table>';
    for (var i = 1; i < 7; i++) {
      tabela += '<tr>';
      for (var j = 1; j < 10; j++) {
        tabela += '<td class="redips-drag containerDrop" id="td' + k + '"></td>';
        k++;
      }
      tabela += '</tr>';
    }
    tabela += '</table>';
    document.getElementById('areaPlotar').innerHTML = tabela;
  };

  insertAfter = function(newNode, referenceNode) {
    referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
  };

  teste();
  redipsInit();

})();
.containerDrag {
  width: 23px;
  height: 26px;
  border: 1px rgb(255, 255, 188) double;
  background: rgb(255, 255, 110);
}
.containerDrop {
  width: 23px;
  height: 26px;
  border: 1px rgb(140, 173, 188) double;
  background: rgb(10, 255, 255);
}
.icon1 {
  background: url(https://fbstatic-a.akamaihd.net/rsrc.php/yV/r/hzMapiNYYpW.ico) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon2 {
  background: url(http://img3.wikia.nocookie.net/__cb20130407235019/logopedia/images/1/13/YouTube_Favicon_2009.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon3 {
  background: url(http://www.correiodopovo.com.br/blogs/juremirmachado/wp-content/themes/ifeature/images/social/twitter.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon4 {
  background: url(http://socialmercosul.org/wp-content/themes/mercosul/imagens/instagram.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon5 {
  background: url(http://www.jodonto.com.br/_img/icone_msn_rodape_jodonto.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon6 {
  background: url(http://www.howto-outlook.com/pictures/signature_icons/skype-add.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon7 {
  background: url(http://www.pedroquintanilha.com.br/wp-content/plugins/custom-about-author/images/social_media/google_plus.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon8 {
  background: url(http://fabc.com.br/fabc/wp-content/themes/campus/assets/images/theme/social-icons/obox/linkedin-32.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon9 {
  background: url(https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xaf1/v/t1.0-1/p50x50/11148346_1038325069518441_1839972097583978647_n.jpg?oh=5a13d5720b8f67d33299139b88a00cb7&oe=55E9DCAA&__gda__=1445400103_eff89331b290b65ef933085385c89b93) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
<script src="http://www.redips.net/my/preview/REDIPS_drag/redips-drag-min.js"></script>
<div id="redips-drag">
  <div id="selecionaveis" class="selecionaveis">
    <table>
      <tr>
        <td class="containerDrag">
          <div id="drag-1" class="redips-drag redips-clone icon1"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-2" class="redips-drag redips-clone icon2"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-3" class="redips-drag redips-clone icon3"></div>
        </td>
      </tr>
      <tr>
        <td class="containerDrag">
          <div id="drag-4" class="redips-drag redips-clone icon4"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-5" class="redips-drag redips-clone icon5"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-6" class="redips-drag redips-clone icon6"></div>
        </td>
      </tr>
      <tr>
        <td class="containerDrag">
          <div id="drag-7" class="redips-drag redips-clone icon7"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-8" class="redips-drag redips-clone icon8"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-9" class="redips-drag redips-clone icon9"></div>
        </td>
      </tr>
    </table>

  </div>
  <div id="areaPlotar" class="areaPlotar"></div>
</div>

单击元素希望他像那样被拉动,例如,如果它被设置为占据三个区域:

插入图像描述

当你在 plotável 区域添加元素时,它应该如下所示:

插入图像描述

我阅读了网站上可用的文档,但我仍然很难创建符合逻辑的....

请原谅英语不好,但不要说流利的英语......

4

2 回答 2

1

我是 REDIPS.drag 的开发人员,请参阅以下 jsFiddle 演示:

http://jsfiddle.net/dvxokzLw/1/

演示展示了如何在目标单元格旁边克隆已删除的 DIV 元素。JavaScript 代码很简单,应该是继续开发的良好基础:

// define event handler after cloned element is dropped
// tc is target cell reference (where element is dropped)
rd.event.clonedDropped = function (tc) {
    var n1 = tc.nextElementSibling, // first cell next to dropped element
        n2,                         // second cell next to dropped element
        objNew;                     // cloned element
   // clone first element (if next cell exists)
   if (n1) {
      n2 = n1.nextElementSibling,      // try to set reference to second cell
      objNew = rd.cloneObject(rd.obj); // clone itself
      n1.appendChild(objNew);          // append to first cell
   }
   // clone second element (if second cell exists)
   if (n2) {
      objNew = rd.cloneObject(rd.obj); // clone itself
      n2.appendChild(objNew);          // append to second cell
   }
};

如果您需要进一步的帮助,请随时与我联系。

干杯!

于 2015-07-28T13:48:29.097 回答
0

感谢朋友@dbunic 和@MaiconCarraro在这里获得的帮助,SOpt 设法解决了这个问题。如果有一天对某人有用,下面是完整的代码:

"use strict";

var redipsInit,
    areaPlotMusica,
    showContent,
    getContent,
    criaClones,
    removeClones;

areaPlotMusica = function (){
  var k = 1; var tabela = '';
  tabela = '<table id="table0">';
  for (var i = 0; i < 10; i++) {
    tabela += '<tr class="containerFaixa">';
    for (var j = 0; j < 10; j++) {
      tabela += '<td class="redips-drag containerDrop" id="td'+k+'"></td>';
      k++;
    }
    tabela += '</tr>';
  }
  tabela += '</table>';
  document.getElementById('areaPlotar').innerHTML = tabela;
}

redipsInit = function () {
  areaPlotMusica();
  var rd = REDIPS.drag;
  rd.dropMode = 'single';
  rd.hover.colorTd = 'rgb(159, 176, 183)';
  rd.init();

  rd.event.moved = function() {        
    var ids = rd.obj.id;
    if(ids.length > 9) ids = ids.substring(0, 10);
    if(ids.length < 9) return;
    var divs = document.querySelectorAll("div[id^=" + ids + "]");
    for (var i=0;i<divs.length;i++) if (divs[i] != rd.obj) rd.deleteObject(divs[i]);
    criaClones(rd.obj);
    showContent();
  };

  rd.event.dropped = function (tc) {
    var ids = rd.obj.id.split("-");
    var id = ids[2].substring(0, 1);
    if(id < 4){

    }else if(id > 3 && id < 7){
      var n1 = tc.nextElementSibling,
          objNew;
      removeClones(rd.obj);

      if (n1) {
        objNew = rd.cloneObject(rd.obj);
        n1.appendChild(objNew);
      }
    }else{
      var n1 = tc.nextElementSibling, // first cell next to dropped element
          n2,                         // second cell next to dropped element
          n3,                         // thirt cell next to dropped element
          objNew;                     // cloned element
      removeClones(rd.obj);

      if (n1) {
        n2 = n1.nextElementSibling,      // try to set reference to second cell
          objNew = rd.cloneObject(rd.obj); // clone itself
        n1.appendChild(objNew);          // append to first cell
      }
      if (n2) {
        n3 = n2.nextElementSibling,      // try to set reference to second cell
          objNew = rd.cloneObject(rd.obj); // clone itself
        n2.appendChild(objNew);          // append to second cell
      }
      if (n3) {
        objNew = rd.cloneObject(rd.obj); // clone itself
        n3.appendChild(objNew);          // append to second cell
      }
    }

    showContent();
  };
};

showContent = function () {
  var log = '';
  var message = document.getElementById('message');
  for ( var i = 1; i <= 100; i++) {
    log += 'td'+i+' = ' + getContent('td'+i) + '<br>';
  }

  message.innerHTML = log;
};

getContent = function (id) {
  var td = document.getElementById(id),
      content = '',
      cn, i;
  for (i = 0; i < td.childNodes.length; i++) {
    cn = td.childNodes[i];
    if (cn.nodeName === 'DIV' && cn.className.indexOf('drag') > -1) { 
      content += cn.id + '_';
    }
  }
  content = content.substring(0, content.length - 1);
  return content;
};

criaClones = function (divClicado) {
  var ids = divClicado.id.split("-");
  var id = ids[2].substring(0, 1);
  if(id < 4){

  }else if(id > 3 && id < 7){
    var divAux = divClicado.cloneNode(0);
    divAux.style.top = "initial";
    divAux.style.left = "initial";
    divAux.style.position = "initial";
    divAux.style.marginLeft = "28px";
    divAux.style.marginTop = "-1px";
    divClicado.appendChild(divAux);
  }else{
    var divAux = divClicado.cloneNode(0);
    divAux.style.top = "initial";
    divAux.style.left = "initial";
    divAux.style.position = "initial";
    var divAux2 = divAux.cloneNode(0);
    divAux.style.marginLeft = "28px";
    divAux.style.marginTop = "-1px";
    divAux2.style.marginLeft = "57px";
    divAux2.style.marginTop = "-22px";
    var divAux3 = divAux2.cloneNode(0);
    divAux3.style.marginLeft = "86px";
    divAux3.style.marginTop = "-22px";
    divClicado.appendChild(divAux);
    divClicado.appendChild(divAux2);
    divClicado.appendChild(divAux3);
  }

};

// remove duplicate element 
removeClones = function (div) {
  while (div.hasChildNodes()) {
    div.removeChild(div.lastChild);
  }
};

// add onload event listener
if (window.addEventListener) {
  window.addEventListener('load', redipsInit, false);
}else if (window.attachEvent) {
  window.attachEvent('onload', redipsInit);
}
.containerDrag {
  width: 23px;
  height: 26px;
  border: 1px rgb(255, 255, 188) double;
  background: rgb(255, 255, 110);
}

.containerMessage {
  position: absolute;
  overflow: auto;
  height: 310px;
  width: 250px;
  left: 50%; 
  background: rgb(255, 255, 110);
}

.containerDrop {
  width: 23px;
  height: 26px;
  border: 1px rgb(140, 173, 188) double;
  background: rgb(10, 255, 255);
}

.icon1 {
  background: url(http://www.1914-1918-online.net/_rechte_seite/social_media_icons/icon_facebook_20.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon2 {
  background: url(http://www.gaba-network.org/Files/Images/Buttons/SocialMedia_youtube_20x20.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
.icon3 {
  background: url(http://www.correiodopovo.com.br/blogs/juremirmachado/wp-content/themes/ifeature/images/social/twitter.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon4 {
  background: url(http://socialmercosul.org/wp-content/themes/mercosul/imagens/instagram.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon5 {
  background: url(http://www.jodonto.com.br/_img/icone_msn_rodape_jodonto.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon6 {
  background: url(http://www.howto-outlook.com/pictures/signature_icons/skype-add.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon7 {
  background: url(http://www.pedroquintanilha.com.br/wp-content/plugins/custom-about-author/images/social_media/google_plus.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon8 {
  background: url(http://fabc.com.br/fabc/wp-content/themes/campus/assets/images/theme/social-icons/obox/linkedin-32.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}

.icon9 {
  background: url(http://www.myiconfinder.com/uploads/iconsets/20-20-556599c9fb64134dd4c984c6a08b949a.png) no-repeat center;
  width: 20px;
  height: 20px;
  cursor: pointer;
  float: left;
  border: 1px rgb(89, 89, 89) solid;
  border-radius: 7px;
}
<script src="http://www.redips.net/my/preview/REDIPS_drag/redips-drag-min.js"></script>
<div id="redips-drag">
  <div id="selecionaveis" class="selecionaveis">
    <table>
      <tr>
        <td class="containerDrag">
          <div id="drag-1-1" class="redips-drag redips-clone icon1"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-2" class="redips-drag redips-clone icon2"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-3" class="redips-drag redips-clone icon3"></div>
        </td>
      </tr>
      <tr>
        <td class="containerDrag">
          <div id="drag-1-4" class="redips-drag redips-clone icon4"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-5" class="redips-drag redips-clone icon5"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-6" class="redips-drag redips-clone icon6"></div>
        </td>
      </tr>
      <tr>
        <td class="containerDrag">
          <div id="drag-1-7" class="redips-drag redips-clone icon7"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-8" class="redips-drag redips-clone icon8"></div>
        </td>
        <td class="containerDrag">
          <div id="drag-1-9" class="redips-drag redips-clone icon9"></div>
        </td>
      </tr>
    </table>
<div id="message" class="containerMessage"></div>
  </div>
  <div id="areaPlotar" class="areaPlotar"></div>
</div>

于 2015-07-31T13:36:29.753 回答