[WebDevCurriculum] drag
12714 ワード
1.画面領域
2.座標概念
dragを含むmouseイベントは,まず座標概念を理解する必要がある.
※スクロールバーの移動は座標値の影響を受けます.
※スクロールバーの移動は座標値の影響を受けません.
3. CSS position
座標設定(position)の概念を理解してドラッグイベント(object move)を開始します.
4.主な方法
addEventListenerは、単一のオブジェクトにマウスイベントを追加できます.
4-1. 要素のドラッグロジック
객체정의
let section = document.querySelector('.desktop')
let container = section.querySelector('.container');
let box = container.querySelector('.box')
객체에 대한 mousedown/mousemove/mouseup을 활용하여 drag logic 구현
let isClicked = false;
let offsetX, offsetY = 0;
container.onmousedown = function(e){
//box를 선택하였을때만
if(e.target == box){
isClicked = true;
offsetX = e.offsetX;
offsetY = e.offsetY;
}
}
//box가 종속되어있는 부모영역(DOM)에서 움직일 경우에 반응
//box 객체에 대해서는 mousemove event에 반응하여 움직임
container.onmousemove = function(e){
if(isClicked){
box.style.position = 'absolute';
box.style.left = e.pageX - offsetX + 'px';
box.style.top = e.pageY - offsetY + 'px';
}else{
return ;
}
container.onmouseup = function(e){
isClicked = false;
}
4-2. イベントターゲット情報の取得の重要性
if(e.target == box)
部分が適用されると、選択されたオブジェクトのプロパティがboxであっても、最上位オブジェクト(上のブロック)にのみイベントが適用されます.4-3. 複数の要素のドラッグロジック
객체정의
let section = document.querySelector('.desktop')
let container = section.querySelector('.container');
let box = container.querySelector('.box')
현재 이벤트가 적용될(선택된) 객체 정보를 저장할 변수 선언
let isClicked = false;
let offsetX, offsetY = 0;
let currentObject = null;
currentObject를 활용하여 모든 객체에 event를 적용할 수 있도록 설정
container.onmousedown = function(e){
//box를 선택하였을때만
isClicked = true;
offsetX = e.offsetX;
offsetY = e.offsetY;
current = e.target;
}
//box가 종속되어있는 부모영역(DOM)에서 움직일 경우에 반응
//box 객체에 대해서는 mousemove event에 반응하여 움직임
container.onmousemove = function(e){
if(isClicked){
current.style.position = 'absolute';
current.style.left = e.pageX - offsetX + 'px';
current.style.top = e.pageY - offsetY + 'px';
}else{
return ;
}
container.onmouseup = function(e){
isClicked = false;
}
}
5.参照リンク
要素ドラッグの深化(styleではなく変換による移動)
https://velog.io/@altmshfkgudtjr/JS-Screen-Dragging-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0
座標/drag event基本概念
https://www.youtube.com/watch?v=Qzmya5CV9FA&list=RDCMUC5-ixpj8DioZqmrasj6Ihpw&start_radio=1&t=395s
Reference
この問題について([WebDevCurriculum] drag), 我々は、より多くの情報をここで見つけました https://velog.io/@gyrbs22/WebDevCurriculum-dragテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol