일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- interrupted()
- ObjectInputStream
- first-child
- String char[] 형변환
- 리눅스세팅
- 스레드그룸
- 표현 언어
- Daemon()
- StringWriter
- interrupt()
- 동기화
- isinterrupted()
- ThreadGroup()
- InputDialog
- 상관서브쿼리
- char[] String 형변환
- ID중복
- Linux셋팅
- Linux세팅
- 리눅스셋팅
- MemoryStream
- include 지시자
- include액션태그
- include지시자
- 메모리스트림
- sleep()메소드
- first-of-child
- 아이디중복
- 상관 서브 쿼리
- StringReader
- Today
- Total
다연이네
[days06] draggable()와 마우스 관련 이벤트 본문
해당 div태그들을 마우스 좌측 버튼을 이용해 드래그(이동)할 수 있다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<!-- <link rel="stylesheet" href="/resources/demos/style.css"> -->
<!-- 내pc에서 찾고 있음 -> 앞에 https://붙혀주자 그래도 못찾아 https://code.jquery.com/-->
<!-- 나중에 웹사이트 만들때 경로 맞춰주란 소리다 -->
<link rel="stylesheet" href="https://code.jquery.com/resources/demos/style.css">
<style>
.draggable {
width: 150px;
height: 150px;
padding: 0.5em;
border: 1px solid gray;
}
</style>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script>
$( function() {
//draggable() 함수 jquery-ul.js 스크립트 파일 안에 선언된 함수
$( ".draggable" ).draggable();
} );
</script>
</head>
<body>
<div class="draggable" class="ui-widget-content">
<p>컴퓨터</p>
</div>
<div class="draggable" class="ui-widget-content">
<p>TV</p>
</div>
<div class="draggable" class="ui-widget-content">
<p>침대</p>
</div>
<div class="draggable" class="ui-widget-content">
<p>책상</p>
</div>
<div class="draggable" class="ui-widget-content">
<p>Drag me around</p>
</div>
</body>
</html>
알아두기!!
<script>
$("document").ready(function() {
}); //얘를 줄여서
//이렇게 쓴다
$(function (){ //백프로 같은 코딩
});
</script>
마우스 관련 이벤트
1. onmouseover : 해당 영역위에 커서가 진입하는 순간 발생
2. onmouseout : 해당 영역에서 커서가 빠져나가는 순간 발생
3. onmousedown : 해당 객체의 영역에서 마우스 버튼이 눌려지는 순간 발생
4. onmouseup : 해당 객체의 영역에서 마우스 버튼이 떼는 순간 발생
5. onmousemove : 해당 객체의 영여겡서 커서가 움직이는 순간 발생
1. clientX, clientY
클라이언트 영역 내의 가로,세로 좌표 제공 (클라이언트 영역 : 현재 보이는 브라우저 화면이 기준이다)
clientX : 브라우저 페이지에서의 X좌표 위치를 반환하나 스크롤은 무시하고 해당 페이지의 상단을 0으로 측정
clientY : 브라우저 페이지에서의 Y좌표 위치를 반환하나 스크롤은 무시하고 해당 페이지의 상단을 0으로 측정
2. offsetX, offsetY
화면 기준이 아니라 이벤트 대상 기준
(화면 중간에 있는 박스 내부에서 클릭한 위치를 찾을 때, 해당 박스의 왼쪽 모서리 좌표가 0이된다)
전체 문서를 기준으로 한다(스크롤 화면 포함).
offsetX : 이벤트 대상 객체에서의 상대적 마우스 x좌표 위치를 반환
offsetY : 이벤트 대상 객체에서의 상대적 마우스 y좌표 위치를 반환
3. pageX, pageY
전체 문서를 기준으로 x,y 좌표를 반환 한다. (스크롤 화면을 포함해서 측정)
pageX : 브라우저 페이지에서의 x좌표 위치를 반환
pageY : 브라우저 페이지에서의 Y좌표 위치를 반환
4. screenX, screenY
모니터 화면을 기준으로 좌표 제공.
브라우저 화면이 아니라 자신의 모니터 화면 전체를 기준으로 좌표를 측정한다.
screenX : 전체 모니터 스크린에서의 x좌표 위치를 반환
screenY :전체 모니터 스크린에서의 y좌표 위치를 반환
각 박스들을 파란 부분을 왼쪽 마우스를 누르며 드래그할 수 있다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Insert title here</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
.myDiv{
background: #f1f1f1;
text-align: center;
border: 1px solid #d3d3d3;
position: absolute;
z-index: 9;
}
.myDivHeader{
padding: 10px;
cursor: move;
z-index: 10px;
background: #2396F3;
color: #fff;
}
</style>
</head>
<body>
<!-- .myDiv>.myDivHeader+p*3 -->
<div id="myDiv1" class="myDiv">
<div id="myDiv1Header" class="myDivHeader">Click Here</div>
<p>DragDrop</p>
<p>DragOver</p>
<p>Box</p>
</div>
<div id="myDiv2" class="myDiv">
<div id="myDiv2Header" class="myDivHeader">Click Here</div>
<p>DragDrop</p>
<p>DragOver</p>
<p>Box</p>
</div>
<div id="myDiv3" class="myDiv">
<div id="myDiv3Header" class="myDivHeader">Click Here</div>
<p>DragDrop</p>
<p>DragOver</p>
<p>Box</p>
</div>
<script>
function draggable(elem) {
var pos1 = 0, pos2 = 0; //이동한 xy좌표값
var pos3 = 0, pos4 = 0; // xy좌표값
if (document.getElementById(elem.id+"Header")) { //myDiv1Header 뜻함
document.getElementById(elem.id+"Header").onmousedown = dragMouseDown;
//onmouserdown할때 dragMouseDown함수를 등록하겠다
}
//클로저(중첩함수)
function dragMouseDown(e) { //드래그하기위해 마우스 다운할때
e = e || window.event; //브라우저따라 안먹을 수 있으니 두개 써주기
//alert(e.button); //마우스 클릭 - 왼0 휠1 오2
if(e.button==0){ //마우스 좌측 버튼 클릭시
pos3 = e.clientX;
pos4 = e.clientY;
//드래그 드롭 작업을 위한 클릭한 위치좌표 얻어오기
//console.log(pos3+" / "+pos4); //클릭한 위치값
console.log(elem.offsetLeft+" / "+elem.offsetTop); //위치값
//left="8px" -> 8 변환 필요
//offset= 8 (숫자형으로 돌려주기 때문에 변환 필요 없음)
document.onmousemove= elementDrag; //문서 전체에서 마우스 move, up 일어남
document.onmouseup= closeDragElement;
}
}
function elementDrag(e) {
//console.log("document.onmousemove...elementDrag");
e=e||window.event;
pos1 = pos3 - e.clientX; //이동한 거리x
pos2 = pos4 - e.clientY; //이동한 거리y
//console.log(pos1+" / "+pos2);
elem.style.left =(elem.offsetLeft - pos1)+"px"; //+"px" 주의
elem.style.top =(elem.offsetTop - pos2)+"px"; //+"px" 주의
//원래 위치값도 옮겨줘야함 (3번쨰로 옮기면 2번째로 옮겨진 그 위치가 원래 위치값이 되니까 )
pos3 = e.clientX;
pos4 = e.clientY;
}
function closeDragElement(e) {
//console.log("document.onmouseup...closeDragElement");
document.onmousemove=null;
document.onmouseup= null;
}
}
//$(".draggable").draggable();
draggable(document.getElementById("myDiv1"));
draggable(document.getElementById("myDiv2"));
draggable(document.getElementById("myDiv3"));
</script>
</body>
</html>
'Web > JavaScript' 카테고리의 다른 글
[days06] 1) js 컬렉션 2)DOM (0) | 2020.12.16 |
---|---|
[days06] 공 튀기기 (0) | 2020.12.16 |
[days06] 클로저(Closure) (중요! 취업질문 多) (0) | 2020.12.16 |
[days06] js call()/apply() 메소드 (0) | 2020.12.16 |
[days05] js 객체와 함수 (0) | 2020.12.15 |