How to set a boundary for drag events using vanilla javascript? - Stack Overflow

I have made a simple drag and drop game. I want to ensure the user cannot move the draggable elements o

I have made a simple drag and drop game. I want to ensure the user cannot move the draggable elements outside of the bounds of the containing div (class="fill_in_the_gaps--container) either by touch or mouse movement. I do not want to use any libraries. How do I achieve this using vanilla javascript?

// //backend produces an array with answers
// const gapFillAnswers = ["goods & services","opportunities","water","sports car","tangible","intangible","entrepreneurs"];
const answerSpaces = document.querySelectorAll(".fill_in_the_gaps--answer_space");
const answerContainer = document.querySelector(".fill_in_the_gaps--answers_container")
const answerWords = document.querySelectorAll(".fill_in_the_gaps--answers");


answerContainer.addEventListener('drop',dropHandler);
answerContainer.addEventListener('dragover',dragOverHandler);

answerWords.forEach(element =>{
    element.addEventListener('dragstart',dragStartHandler);
    element.addEventListener('dragend',dragEndHandler);
   
})

answerSpaces.forEach(element =>{
   
    element.addEventListener('drop',dropHandler);
    element.addEventListener('dragover',dragOverHandler);
    element.addEventListener('dragenter',dragEnterHandler);
    element.addEventListener('dragleave',dragLeaveHandler);
})

function dropHandler(e){

    //create a pointer to the original dragged element using the dataTransfer object this willl then be appended to the drop space
    if(e.target.classList.contains("fill_in_the_gaps--answer_space")){
     e.target.style.border = "none";
    }
   
    e.preventDefault();
    const element_to_be_dropped = document.getElementById(e.dataTransfer.getData("text"))
    e.target.append(element_to_be_dropped);
   
}

function dragOverHandler(e){
    e.preventDefault();  
}

function dragStartHandler(e){
    e.target.style.opacity = "0.5";
    e.dataTransfer.setData("text",e.target.getAttribute("id"));
}

function dragEndHandler(e){
    e.target.style.opacity = "1";
}
function dragEnterHandler(e){
   e.target.style.border = "2px dotted green";
}
function dragLeaveHandler(e){
    e.target.style.border = "none";
}
*{
    box-sizing: border-box;
}

:root{
    --blue: #000724;
    --pink: #DC398D;
    --yellow:#FEBD31;
    --green:#36F906;
}

body{
    background-color: var(--blue);
   
}


.fill_in_the_gaps--container{
    padding: 1rem;
    border-radius: 0.5rem;
    border-color: var(--pink);
    border-width: 5px;
    border-style: solid;
    background-color: whitesmoke;
}


.fill_in_the_gaps--answers_container{
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-around;
    overflow-y: scroll;
    padding: 1rem;
    border:2px dotted gray;
}

.fill_in_the_gaps--answers{
    display: inline-block;  
    white-space:nowrap;
    margin-left: 15px;
    margin-right: 15px; 
    
   
}

.fill_in_the_gaps--answer_space{
    display: inline-block;
    background-color: var(--yellow);
    width:8rem;
    height: 1rem;
    margin-top: 2px;
    margin-left: 2px;
    margin-right: 2px;;
    text-align: center;
    padding-bottom:2px;
    vertical-align:middle;
   
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src=".2.4/gsap.min.js" defer ></script>
    <script src="app.js" defer></script>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div data-board="aqa" data-level="gcse" data-subject="business" data-unit="1.1" data-type="fill_in_the_gaps" class="fill_in_the_gaps--container">
        <p class="fill_in_the_gaps--main_text">
            A business is an anisation that produces<span id="answer_space_0" class="fill_in_the_gaps--answer_space"></span>.Often businesses are setup to take advantage of business
            <span id="answer_space_1" class="fill_in_the_gaps--answer_space"></span>. Many businessess sell items that people need, some businesses sell items that people want. An example of a need is 
            <span id="answer_space_2" class="fill_in_the_gaps--answer_space"></span>. An example of a want is a <span id="answer_space_3" class="fill_in_the_gaps--answer_space"></span>. Goods are an example of 
            <span id="answer_space_4" class="fill_in_the_gaps--answer_space"></span>items. Services are an example of <span id="answer_space_5" class="fill_in_the_gaps--answer_space"></span>items. People who start up a business are known as 
            <span id="answer_space_6" class="fill_in_the_gaps--answer_space"></span>their reward for taking a risk is profit.
        </p>
        <div class="fill_in_the_gaps--answers_container">
            <span id="answer_0" draggable="true" class="fill_in_the_gaps--answers">goods & services</span>
            <span id="answer_1" draggable="true" class="fill_in_the_gaps--answers">opportunities</span>
            <span id="answer_2" draggable="true" class="fill_in_the_gaps--answers">water</span>
            <span id="answer_3" draggable="true" class="fill_in_the_gaps--answers">sports car</span>
            <span id="answer_4" draggable="true" class="fill_in_the_gaps--answers">tangible</span>
            <span id="answer_5" draggable="true" class="fill_in_the_gaps--answers">intangible</span>
            <span id="answer_6" draggable="true" class="fill_in_the_gaps--answers">entrepreneurs</span>
        </div>
    </div>
</body>
</html>

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745048829a4608260.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信