亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何限制div內的圖片拖動?

如何限制div內的圖片拖動?

偶然的你 2024-01-22 16:56:45
我附上了片段,其中我有一個在 div 內可拖動和縮放的圖像。但是有一個問題,當從左向右移動圖像時,如果圖像的角與父級的 X 和 Y 的角相交,則圖像應該無法移動。我實際上想知道圖像的角何時與父級相交div 角,因為我不想在滿足此條件時允許拖動。拖動圖像時,背景紅色不應可見。window.repositionImage = function(event){var element = document.getElementById('img');    element.addEventListener('mousedown', function(e){        e.stopPropagation();    element.style.cursor = "grabbing";    if (e.target != element) return;        var offsetX = e.pageX - element.offsetLeft;    var offsetY = e.pageY - element.offsetTop;      var move = function(e){     element.style.left = e.pageX - offsetX + "px";     element.style.top = e.pageY - offsetY + "px";    }        var stop = function(){      element.style.cursor = "default";      document.removeEventListener("mousemove", move);      document.removeEventListener("mouseup", stop);    }            document.addEventListener("mousemove", move);    document.addEventListener("mouseup", stop);   }) }window.panChangeHandler = function(e){  var element = document.getElementById('img');   if (e.target.value == 0) {      element.style.left = "0px";      element.style.top = "0px";   }  img.style.transform = `scale(1.${e.target.value})`;}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><div class='item'>  <span class='slider'>    <input type='range' aria-orientation="vertical"      value="0"  min="0" max="9"  step="1"                       oninput="panChangeHandler(event)"    />  </span>  <img id='img' src="https://images.unsplash.com/photo-1494548162494-384bba4ab999?ixlib=rb-1.2.1&w=1000&q=80" alt='image' onmouseover="repositionImage(event)" /></div>
查看完整描述

3 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

您可以嘗試一個簡單的css修復方法,但我不確定它的跨瀏覽器兼容性。將.item img位置更改為sticky。


window.repositionImage = function(event){

var element = document.getElementById('img');

  

  element.addEventListener('mousedown', function(e){

    

    e.stopPropagation();

    element.style.cursor = "grabbing";

    if (e.target != element) return;

    

    var offsetX = e.pageX - element.offsetLeft;

    var offsetY = e.pageY - element.offsetTop;

  

    var move = function(e){

     element.style.left = e.pageX - offsetX + "px";

     element.style.top = e.pageY - offsetY + "px";

    }

    

    var stop = function(){

      element.style.cursor = "default";

      document.removeEventListener("mousemove", move);

      document.removeEventListener("mouseup", stop);

    }

    

    

    document.addEventListener("mousemove", move);

    document.addEventListener("mouseup", stop);

   }) 

}


window.panChangeHandler = function(e){

  var element = document.getElementById('img');

  img.style.transform = `scale(1.${e.target.value})`;

}

document.getElementById("img").disabled = true;

.item {

  border: 1px solid;

  background: red;

  width: 300px;

  height: 300px;

  overflow: hidden;

  position:relative;

}


.item img {

  position: sticky;

  width: 100%;

  height: 100%;

  -webkit-user-drag: none;

  left:0;

  top:0;

}


.slider {


  z-index: 9;

  position: absolute;

  left: 0;

  top: 0;

  margin-left: -20px;

  margin-top: 70px;

  writing-mode: bt-lr; /* IE */

  -webkit-appearance: slider-vertical; /* WebKit */

  transform: rotateZ(270deg);

}


.slider input {

  width: 80px;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class='item'>

  <span class='slider'>

    <input type='range' aria-orientation="vertical"

      value="0"  min="0" max="9"  step="1"                       oninput="panChangeHandler(event)"

    />

  </span>

  <img id='img' src="https://images.unsplash.com/photo-1494548162494-384bba4ab999?ixlib=rb-1.2.1&w=1000&q=80" alt='image' onmouseover="repositionImage(event)" />

</div>


查看完整回答
反對 回復 2024-01-22
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

我設法解決了這個問題:


function parseComplexStyleProperty(str) {

        var regex = /(\w+)\((.+?)\)/g,

            transform = {},

            match;


        while ((match = regex.exec(str))) transform[match[1]] = match[2];


        return transform;

    };


window.repositionImage = function(event){

var element = document.getElementById('img');

  

  element.addEventListener('mousedown', function(e){

    

    e.stopPropagation();

    element.style.cursor = "grabbing";

    if (e.target != element) return;

    

    var offsetX = e.pageX - element.offsetLeft;

    var offsetY = e.pageY - element.offsetTop;

      var x = 0;

    var y = 0;

    

    var move = function(e){

         x = e.pageX - offsetX;

      y = e.pageY - offsetY;

     element.style.left = e.pageX - offsetX + "px";

     element.style.top = e.pageY - offsetY + "px";

    }

    

    var stop = function(){

      element.style.cursor = "default";

          var t = parseComplexStyleProperty(element.style.transform);

      

       if (!Object.keys(t).length) {

          element.style.left = "0px";

          element.style.top = "0px";

        }

  else {

          var imageWidth = element.clientWidth * parseFloat(t.scale);

          var imageHeight =

              element.clientHeight * parseFloat(t.scale);

          var pointToSubX = Math.trunc(

            (imageWidth - parent.clientWidth) / 2

          );

          var pointToSubY = Math.trunc(

            (imageHeight - parent.clientHeight) / 2

          );

          

          if (x > pointToSubX || x < -pointToSubX) {

            if (x > pointToSubX)

              element.style.left = pointToSubX + "px";

            else element.style.left = -pointToSubX + "px";

          }

          

          if (y > pointToSubY || y < -pointToSubY) {

            if (y > pointToSubY)

              element.style.top = pointToSubY + "px";

            else element.style.top = -pointToSubY + "px";

          }

      

      document.removeEventListener("mousemove", move);

      document.removeEventListener("mouseup", stop);

    }

    }

    

    

    document.addEventListener("mousemove", move);

    document.addEventListener("mouseup", stop);

   }) 

}


window.panChangeHandler = function(e){

  var element = document.getElementById('img');

  img.style.transform = `scale(1.${e.target.value})`;

}

document.getElementById("img").disabled = true;

.item {

     margin-right: 1px;

    height: 200px;

    background: white;

    overflow: hidden;

  position: relative;

}


.item img {

transform: scale(1);

position: relative;

    background-color: #eee;

  width: 100%;

  height: 100%;

  -webkit-user-drag: none;

  left:0;

  top:0;

}


.slider {


  z-index: 9;

  position: absolute;

  left: 0;

  top: 0;

  margin-left: -20px;

  margin-top: 70px;

  writing-mode: bt-lr; /* IE */

  -webkit-appearance: slider-vertical; /* WebKit */

  transform: rotateZ(270deg);

}


.slider input {

  width: 80px;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class='item'>

  <span class='slider'>

    <input type='range' aria-orientation="vertical"

      value="0"  min="0" max="9"  step="1"                       oninput="panChangeHandler(event)"

    />

  </span>

  <img id='img' src="https://images.unsplash.com/photo-1494548162494-384bba4ab999?ixlib=rb-1.2.1&w=1000&q=80" alt='image' 

       onmouseover="repositionImage(event)" />

</div>


查看完整回答
反對 回復 2024-01-22
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

查看

if (e.target.tagName == "DIV" ) return;

發生掉落事件時


查看完整回答
反對 回復 2024-01-22
  • 3 回答
  • 0 關注
  • 228 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號