Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Drag & Drop objektu ve webovém prohlížeči

Ahoj,

prosím měl bych dotaz.
Jedná se mi o posunutí objektu myší na PC a na tabletu rukou ve webové stránce.

Mám to připravené na zkoušení tady:
https://codepen.io/bladnman/pen/LEWYYN

Všude to funguje až na jednu drobnost.
Když změním element DIV na IMG (obrázek), přestane to fungovat.
Jako myslím ten posun.

Chtěl bych se zeptat, proč se tak děje a jak to upravit.
Nemělo by to být složité.

Řešení:

Tak nakonec jsem se zamyslel nad různými variantami dosažení cíle.

Postup, který se mě nejvíce líbí je přes staré dobré jQuery (zdravíme moderní těžkoobratné webové vývojáře označující jej za údajně nevhodné pro velké projekty - vymřete na choleru, vy "intelektuálové" 👍).

Jquery má úplně jednoduchou funkci, jako facka -> Draggable

$(selector).draggable();

Více na odkaze s demem zde: https://jqueryui.com/draggable

Nicméně je pravda, v tabletech a na mobilech je potřeba přihrát tuto funkci, jinak to tam nejede:

  function touchHandler(event) {
      var touch = event.changedTouches[0];

      var simulatedEvent = document.createEvent("MouseEvent");
          simulatedEvent.initMouseEvent({
          touchstart: "mousedown",
          touchmove: "mousemove",
          touchend: "mouseup"
      }[event.type], true, true, window, 1,
          touch.screenX, touch.screenY,
          touch.clientX, touch.clientY, false,
          false, false, false, 0, null);

      touch.target.dispatchEvent(simulatedEvent);
      event.preventDefault();
  }

  function init() {
      document.addEventListener("touchstart", touchHandler, true);
      document.addEventListener("touchmove", touchHandler, true);
      document.addEventListener("touchend", touchHandler, true);
      document.addEventListener("touchcancel", touchHandler, true);
  }

 $( document ).ready(function() {

    init();

})

A to je celé přátelé.
Na rozdíl od jiných nabobtnalých knihoven je tento kód efektivní a netrhá se ani na pomalejších tabletech. 👍

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Tak nakonec jsem se zamyslel nad různými variantami dosažení cíle. Postup, který se mě nejvíce líbí… poslední
Flash_Gordon 01.05.2023 19:19
Flash_Gordon

Tak nakonec jsem se zamyslel nad různými variantami dosažení cíle.

Postup, který se mě nejvíce líbí je přes staré dobré jQuery (zdravíme moderní těžkoobratné webové vývojáře označující jej za údajně nevhodné pro velké projekty - vymřete na choleru, vy "intelektuálové" 👍).

Jquery má úplně jednoduchou funkci, jako facka -> Draggable

$(selector).draggable();

Více na odkaze s demem zde: https://jqueryui.com/draggable

Nicméně je pravda, v tabletech a na mobilech je potřeba přihrát tuto funkci, jinak to tam nejede:

  function touchHandler(event) {
      var touch = event.changedTouches[0];

      var simulatedEvent = document.createEvent("MouseEvent");
          simulatedEvent.initMouseEvent({
          touchstart: "mousedown",
          touchmove: "mousemove",
          touchend: "mouseup"
      }[event.type], true, true, window, 1,
          touch.screenX, touch.screenY,
          touch.clientX, touch.clientY, false,
          false, false, false, 0, null);

      touch.target.dispatchEvent(simulatedEvent);
      event.preventDefault();
  }

  function init() {
      document.addEventListener("touchstart", touchHandler, true);
      document.addEventListener("touchmove", touchHandler, true);
      document.addEventListener("touchend", touchHandler, true);
      document.addEventListener("touchcancel", touchHandler, true);
  }

 $( document ).ready(function() {

    init();

})

A to je celé přátelé.
Na rozdíl od jiných nabobtnalých knihoven je tento kód efektivní a netrhá se ani na pomalejších tabletech. 👍

Zpět do poradny Odpovědět na původní otázku Nahoru