웹 전단: 자 바스 크 립 트 드래그
3844 단어 JavaScript그림.웹 전단특수효과mouse
앞에서 말 했 듯 이 그림 의 드래그 응용 은 매우 광범 위 하 다. 예 를 들 어 모두 가 알 고 있 는 QQ 전송 파일 은 파일 이나 그림 을 대화 창 으로 드래그 하면 전송 기능 을 완성 할 수 있다.이렇게 편리 한 기능 을 어떻게 배우 지 않 을 수 있 고, 어떻게 못 할 수 있 겠 는가?다음은 제 가 그림 의 드래그 에 대해 여러분 과 간단 한 연 구 를 하 겠 습 니 다.
1. 그림 드래그 의 흐름
그림 의 드래그 는 사실 세 가지 동작 으로 이 루어 집 니 다. 먼저 그림 을 클릭 하려 면 mousedown 사건 을 촉발 해 야 합 니 다.그 다음은 드래그 입 니 다. mouseover 이벤트 에 사 용 됩 니 다.종점 까지 끌 어 다 놓 고 그림 을 내 려 놓 으 려 면 mouseup 이벤트 가 필요 합 니 다.다음은 이 세 가지 사건 에 대해 각각 시범 을 보 여 준다.
2. onmousedown 시작
브 라 우 저 에서 그림 은 위치 가 정 해 져 있 지만 마 우 스 는 우리 손 에 쥐 어 져 있 습 니 다. 어떻게 그림 이 마우스 가 그 를 가리 키 는 것 을 알 게 합 니까?당연히 마우스 이벤트 에 사용 해 야 한다.많은 사건 중에서 mousedown 이 가장 흔 하 다.마우스 로 누 르 면 왼쪽 버튼 이 든 오른쪽 버튼 이 든 누 르 면 mousedown 이벤트 가 발생 합 니 다.물론, 우 리 는 일반적으로 onmousedown 을 쓰 는데, 여기 서 전체 드래그 과정 을 제어 하 는 데 쓰 인 다.
특히 주의해 야 할 것 은 이곳 의 마우스 사건 은 반드시 document 에 써 야 과정의 순 조로 운 실현 을 보장 할 수 있다 는 것 이다.그렇지 않 으 면 위치 가 정확 하지 않 고 표류 하 는 등 현상 이 나타 날 수 있다.예시: document.onmousemove=move; document.onmouseup=Clearmove;
3. onmouseover 가 이동 중 입 니 다.
끌 어야 할 그림 을 선택 하면 다음 단 계 는 당연히 '그녀' 를 데 리 고 가 야 한다.어디로 데려 가?한 번 에 얼마나 갑 니까?사실은 우리 손 에 있 는 마우스 가 제어 하 는 거 야.여기 서 우 리 는 먼저 마우스 의 현재 위 치 를 동적 으로 가 져 와 야 합 니 다. 자바 script 코드 는 다음 과 같 습 니 다.
var oevent = window.event||event;
var clickobj=oevent.target||oevent.srcElement;
var mouseX = oevent.clientX;
var mouseY = oevent.clientY;
oevent 와 clickobj 가 모두 사용 하거나 방법 으로 각각 얻 는 이 유 는 IE 와 DOM 진영 에 서로 다른 방법 이 존재 하기 때문이다.mouseX 와 mouseY 는 현재 브 라 우 저 에 비해 마우스 의 가로 좌표 입 니 다.이 두 개의 좌표 가 있 으 면 우 리 는 그림 을 마 우 스 를 따라 이동 시 킬 수 있다.물론 관례 에 따라 이곳 에 도 특별히 주의해 야 할 부분 이 있다.
moveobj.style.left = (mouseX-30) +"px";
moveobj.style.top = (mouseY-30) +"px";
위의 코드 에서 우 리 는 그림 의 현재 위 치 는 얻 은 마우스 위치 와 같은 것 이 아니 라 30 을 빼 야 한 다 는 것 을 발견 할 수 있 습 니 다. 이 30 은 무엇 입 니까?사실 예시 중의 그림 은 크기 가 60 * 60 이다.브 라 우 저 에서 그림 의 포 지 셔 닝 은 '왼쪽 상단 모드', 즉 top 과 left 입 니 다.드래그 중 에 우 리 는 매번 그림 의 왼쪽 상단 을 누 르 는 것 이 아니 기 때문에 정확 한 포 지 셔 닝 을 위해 그림 크기 의 절반 을 빼 고 인위적으로 그림 의 왼쪽 상단 을 마우스 위 에 올 립 니 다.
4. onmouseup 배치
목적지 에 도착 하면 마 우 스 를 풀 어야 합 니 다. 그러나 적당 한 onmouseup 함수 가 설정 되 어 있 지 않 으 면 얼마 지나 지 않 아 브 라 우 저가 카드 로 변 하 는 것 을 발견 할 수 있 습 니 다.이것 은 드래그 하 는 과정 에서 setinterval 스 레 드 를 열 었 기 때문에 닫 은 적 이 없습니다.onmouseup 이벤트 의 의 미 는 바로 이 스 레 드 를 닫 는 것 입 니 다. 드래그 가 모두 끝 났 으 니 내 려 놓 아야 합 니 다!
var move = 1;
,move = 1;
,move = 0;
, 。
5. 브 라 우 저 에 있 는 모든 요 소 를 끌 어 옵 니 다. (전체 코드)
<script type="text/javascript">
//
var canmove = 0;
// onmousedown
function checkobj(event){
canmove = 1;
var oEvent = window.event||event;
var oMouse=oEvent.target||oEvent.srcElement;
// X Y
var mouseX = oMouse.clientX;
var mouseY = oMouse.clientY;
//
var checkobj= oMouse.id;
}
// onmouseover
function moveobj(event){
if(canmove){
var oEvent = window.event||event;
var oMouse=oEvent.target||oEvent.srcElement;
// X Y
var mouseX = oMouse.clientX;
var mouseY = oMouse.clientY;
//
var checkobj= oMouse.id;
// ,
checkobj.style.left =(mouseX-30)+"px";
checkobj.style.top =(mouseY-30)+"px";
}
}
// onmouseup
function downobj(){
canmove=0;
}
//
document. onmousedown=checkobj;
document.onmousemove=moveobj;
document. onmouseup=downobj;
</script>
코드 의 if (canmove) 는 자바 script 의 0 을 가짜 로 하고 0 이 아 닌 진짜 특성 을 이용 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.