使用拖放REDIPS

时间:2015-06-29 03:50:20

标签: javascript html css redips.drag

我正在使用一个名为(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>
{{1}}

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

inserir a descrição da imagem aqui

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

inserir a descrição da imagem aqui

我对documentation available on the site进行了阅读,但我仍难以创造那种逻辑......

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

2 个答案:

答案 0 :(得分: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
   }
};

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

干杯!

答案 1 :(得分:0)

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

&#13;
&#13;
"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);
}
&#13;
.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;
}
&#13;
<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>
&#13;
&#13;
&#13;