먼저 드래그할 레이어의 렌더링(시뮬레이션 창)을 살펴보겠습니다.
창은 자유로워야 하며, 창의 위치는 절대적이어야 합니다.
창에 제목 표시줄을 추가합니다. 여기서는 창 상단에 배치된 레이어를 사용하고 제목 표시줄의 마우스 커서를 설정합니다. ) 모양을 드래그(이동)합니다(크롬에서 드래그하면 커서가 텍스트 커서로 바뀌고 마우스 버튼을 놓으면 복구됩니다).
창을 드래그하는 과정에서 기록해야 할 값은 다음과 같습니다.
코드는 다음과 같습니다.
코드는 다음과 같습니다.
이 작업을 수행한 후 마우스 이벤트 처리를 시작할 수 있습니다.
이 프로그램에서는 마우스 왼쪽 버튼으로만 창을 끌 수 있고 다른 키로는 끌 수 없기 때문에 마우스 왼쪽 버튼을 눌렀는지 확인해야 합니다. 이 판단은 여러 함수에서 사용될 예정이므로 함수로 추출하여 전달된 매개변수(마우스 키 값, 즉 어떤 키를 눌렀는지)에 따라 판단합니다. 여기서 브라우저 간의 차이점에 주의해야 합니다. IE에서는 마우스 왼쪽 버튼의 값이 1이고, IE가 아닌 경우에는 0입니다.
function isLeftButton(btn) {
if(isIE) {
if(btn == 1)
true를 반환합니다.
else
false를 반환합니다.
} else {
if(btn == 0)
true를 반환합니다.
else
false를 반환합니다. >}
}
드래그 동작은 마우스 왼쪽 버튼을 누르고 이동하면 됩니다. 이 동작을 공유하기 위해 마우스는 먼저 누르기 동작(mousedown)을 트리거한 다음 이동 동작(mousemove)을 트리거합니다. 실제로 드래그하는지 아니면 마우스가 창 위로 지나가는지 확인하려면 마우스 다운 상태를 기록하는 변수를 설정하세요.
var mousedown = false
CSS의 호환성 문제로 인해 여기에서 js를 사용하세요. 마우스가 창 제목 표시줄 위에 있을 때 색상 변경을 제어합니다.
호버링
function over(e) {
Header.style.BackgroundColor = "#5d5d5d";
}
나가기
function out(e) {
header.style.BackgroundColor = "#4d4d4d"
// 가끔 마우스가 작동하지 않을 때도 있습니다. be release 창에서 나가기,
// 이때 마우스 해제 이벤트
up(e)
}
누르기
누르기 이벤트에서는 마우스 왼쪽 버튼이 눌렸는지 먼저 확인해야 합니다.
그렇다면 이때 마우스와 창의 위치가 기록되고, 그렇지 않으면 기록되지 않습니다. 기록됩니다.
function down(e) {
e = e || 이벤트;
return;
mousedown =
oldmouse.x =
oldmouse.y = e.clientY ;
oldpos.x = parsInt(win.style.left.replace("px", ""))
oldpos.y = parseInt(win.style.top.replace("px") , "" ));
}
출시
if(!isLeftButton(e.button))
return;
mousedown = false; 🎜>
이동
에는 두 가지 마우스 이벤트가 포함됩니다.
누르기와 이동입니다. 이동 동작은 마우스 왼쪽 버튼을 누른 경우에만 유효합니다.
창의 새 위치는 드래그 상태에서 마우스의 이동 거리(X와 Y 사이의 거리)에 따라 결정됩니다. 즉,
새 마우스 위치를 왼쪽 버튼을 눌렀을 때 기록된 위치로 전송하고 거리를 얻은 다음 마우스로 이동한 거리에 창의 위치를 더해 새 위치를 얻습니다. 창문.
코드 복사
e =e || event
newpos.x = e.clientX - oldmouse.x; >newpos.y = e.clientY - oldmouse.y
win.style.left = (oldpos.x newpos.x) "px"
win.style.top = (oldpos.y newpos.y) "px" ;
}
}
마지막으로 요소를 바인딩해 보겠습니다.
코드 복사
코드는 다음과 같습니다.
bind("mousemove", move)
하지만 드래그에 문제가 있습니다. FF에서는 처음에는 정상적으로만 드래그할 수 있지만 그 이후에는 조금 지저분해집니다!