当可移动元素接触时如何更改图像?

问题描述 投票:0回答:1

我如何创建一个函数,以便当对象(img1)位于 img2a 上时,它将使其变成 img2b。我必须编写一些代码来分别完成这两件事,但我似乎无法将它们组合起来。

我找到了更改图像的代码(如下)

<!-- HTML code -->
<img id="myImg" src="image1.jpg">
<button id="myButton">Change Image</button>

// JavaScript code
const myImg = document.getElementById("myImg");
const myButton = document.getElementById("myButton");

myButton.addEventListener("click", function() {
  myImg.src = "image2.jpg";
});

我有移动物体的代码(如下)

   
      <img src="https://en.js.cx/clipart/soccer-gate.svg" id="gate" class="droppable">
    
      <img src="https://en.js.cx/clipart/ball.svg" id="ball">
    
      <script>
        let currentDroppable = null;
    
        ball.onmousedown = function(event) {
    
          let shiftX = event.clientX - ball.getBoundingClientRect().left;
          let shiftY = event.clientY - ball.getBoundingClientRect().top;
    
          ball.style.position = 'absolute';
          ball.style.zIndex = 1000;
          document.body.append(ball);
    
          moveAt(event.pageX, event.pageY);
    
          function moveAt(pageX, pageY) {
            ball.style.left = pageX - shiftX + 'px';
            ball.style.top = pageY - shiftY + 'px';
          }
    
          function onMouseMove(event) {
            moveAt(event.pageX, event.pageY);
    
            ball.hidden = true;
            let elemBelow = document.elementFromPoint(event.clientX, event.clientY);
            ball.hidden = false;
    
            if (!elemBelow) return;
    
            let droppableBelow = elemBelow.closest('.droppable');
            if (currentDroppable != droppableBelow) {
              if (currentDroppable) { // null when we were not over a droppable before this event
                leaveDroppable(currentDroppable);
              }
              currentDroppable = droppableBelow;
              if (currentDroppable) { // null if we're not coming over a droppable now
                // (maybe just left the droppable)
                enterDroppable(currentDroppable);
              }
            }
          }
    
          document.addEventListener('mousemove', onMouseMove);
    
          ball.onmouseup = function() {
            document.removeEventListener('mousemove', onMouseMove);
            ball.onmouseup = null;
          };
    
        };
    
        function enterDroppable(elem) {
          elem.style.background = 'pink';
        }
    
        function leaveDroppable(elem) {
          elem.style.background = '';
        }
    
        ball.ondragstart = function() {
          return false;
        };
      </script>
    
    
    </body>
    </html>

如果我能得到任何和所有帮助,我将不胜感激。 具体来说,我正在寻找的是有关用作而不是颜色更改的属性的帮助,我想要更改图像我已经尝试了一些类似 img 的东西,但它还没有工作。

javascript html image drag-and-drop
1个回答
0
投票

根据您的描述,我更改了您的代码,您可以在我为您提供的示例代码中看到结果。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <img src="https://en.js.cx/clipart/soccer-gate.svg" style="width: 100px;" id="gate" class="droppable">

    <img src="https://en.js.cx/clipart/ball.svg" id="ball">

    <script>
        let currentDroppable = null;
        let gateAddr = "https://en.js.cx/clipart/soccer-gate.svg";

        ball.onmousedown = function(event) {

            let shiftX = event.clientX - ball.getBoundingClientRect().left;
            let shiftY = event.clientY - ball.getBoundingClientRect().top;

            ball.style.position = 'absolute';
            ball.style.zIndex = 1000;
            document.body.append(ball);

            moveAt(event.pageX, event.pageY);

            function moveAt(pageX, pageY) {
                ball.style.left = pageX - shiftX + 'px';
                ball.style.top = pageY - shiftY + 'px';
            }

            function onMouseMove(event) {
                moveAt(event.pageX, event.pageY);

                ball.hidden = true;
                let elemBelow = document.elementFromPoint(event.clientX, event.clientY);
                ball.hidden = false;

                if (!elemBelow) return;

                let droppableBelow = elemBelow.closest('.droppable');
                if (currentDroppable != droppableBelow) {
                    if (currentDroppable) { // null when we were not over a droppable before this event
                        leaveDroppable(currentDroppable);
                    }
                    currentDroppable = droppableBelow;
                    if (currentDroppable) { // null if we're not coming over a droppable now
                        // (maybe just left the droppable)
                        enterDroppable(currentDroppable);
                    }
                }
            }

            document.addEventListener('mousemove', onMouseMove);

            ball.onmouseup = function() {
                document.removeEventListener('mousemove', onMouseMove);
                ball.onmouseup = null;
            };

        };

        function enterDroppable(elem) {
            elem.src = "https://www.svgrepo.com/download/116991/goal-label.svg";
        }

        function leaveDroppable(elem) {
            elem.src = gateAddr;
        }

        ball.ondragstart = function() {
            return false;
        };
    </script>
</body>

</html>

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.