웹 프론트엔드 JS 튜토리얼 마우스 드래그 및 이동 subforms_javascript 기술의 JS 구현

마우스 드래그 및 이동 subforms_javascript 기술의 JS 구현

May 16, 2016 pm 04:58 PM
견인 이동하다 생쥐

1. 하위양식

웹사이트를 디자인할 때 다음과 같은 일부 모달 하위 양식을 디자인해야 합니다.

마우스 드래그 및 이동 subforms_javascript 기술의 JS 구현

이 단계는 구현하기 쉽습니다. div CSS만 있으면 됩니다. 코드를 참조하세요.

코드 복사 코드

  <div class="modal-Background"></div>
  <div class="modal-window">
  < div class="head">
                                                                     < 🎜>코드 복사


코드는 다음과 같습니다.

.modal-Background{ background-color : #999999; 하단: 0; 왼쪽: 0; 불투명도: 0.3; 위치: 고정;
오른쪽: 0;
위쪽: 0;
z -색인: 1100;
}

.modal-window
{
배경색: #FFFFFF;
테두리: 1px 단색 #6B94AD;
상자 그림자: 5px 5px 5px #6B94AD;
글꼴 모음 : 'Microsoft YaHei';
글꼴 크기: 12px;
높이: 120px;

왼쪽: 50%;

margin-left: -160px;
margin-top: -160px;
불투명도: 1;
위치: 고정;
위쪽: 50%;
너비: 320px;
Z-색인: 1110;
}

.modal-window .head
{
높이: 25px;
색상: #fff;
글꼴 무게: 600;
배경 이미지: -moz-linear-gradient (상단, #4A8CC5, #2963A5); /* Firefox */
배경 이미지: -webkit-gradient(선형, 왼쪽 상단, 왼쪽 하단, color-stop(0, #4A8CC5), color-stop(1 , #2963A5)); /* Saf4, Chrome */
필터: progid:DXImageTransform.Microsoft.gradient(startColorstr='#4A8CC5', endColorstr='#2963A5', GradientType='0') /* IE */

}


.modal-window .head center
{
padding-top: 2px;
}



위의 html과 css를 추가하면 위의 모달 폼의 효과를 쉽게 얻을 수 있습니다. 그중 left: 50%, top: 50%, margin-left: -160px, margin-top: -160px는 이 모달 형식의 중심 효과를 구현하기 위한 것입니다.

물론, 모달 폼의 크기는 스타일 클래스 .modal-window에 고정되어 있다고 해서 모달 폼의 크기를 수정할 수 없다는 의미는 아닙니다.



코드 복사

코드는 다음과 같습니다.


코드 복사


코드는 다음과 같습니다.


.list-window
{ 너비:600px;

높이:400px;
여백-왼쪽:-300px;

여백-상단:-200px;}

사진과 같습니다

마우스 드래그 및 이동 subforms_javascript 기술의 JS 구현

이 단계의 구현은 매우 간단하다는 것을 알 수 있습니다. 몇 가지 핵심 라인의 CSS 속성을 익히면 이 모달 하위 양식을 "완전히 남용"할 수 있으며 다른 모달 하위 양식에 대한 추론을 이끌어낼 수 있습니다.


2. 하위 폼의 머리 부분을 마우스로 클릭하면 하위 폼을 끌어서 이동하는 방법은 무엇입니까? jQ가 도입되면 이 작은 기능을 구현하는 데 몇 개의 스크립트만 필요합니다. 믿기지 않는다면 보시죠

코드 복사 코드는 다음과 같습니다.

var left, top, $this;
$ (document).delegate('.modal-window .head', 'mousedown', function (e) {
left = e.clientX, top = e.clientY, $this = $(this). css(' 커서', '이동');
this.setCapture ? (
this.setCapture(),
this.onmousemove = function (ev) { mouseMove(ev || event); },
this.onmouseup = mouseUp
) : $(document).bind("mousemove", mouseMove).bind("mouseup", mouseUp);
});
function mouseMove(e) {
var target = $this.parents('.modal-window');
var l = Math.max((e.clientX - left Number(target.css('margin-left').replace (/px $/, '')) || 0), -target.position().left);
var t = Math.max((e.clientY - top Number(target.css('margin- top') .replace(/px$/, '')) || 0), -target.position().top);
l = Math.min(l, $(window).width() - target.width () - target.position().left);
t = Math.min(t, $(window).height() - target.height() - target.position().top);
left = e.clientX;
top = e.clientY;
target.css({ 'margin-left': l, 'margin-top': t });
}
function mouseUp (e) {
var el = $this.css('cursor', 'default').get(0);
el.releaseCapture ?
(
el.releaseCapture( ),
el.onmousemove = el.onmouseup = null
): $(document).unbind("mousemove", mouseMove).unbind("mouseup", mouseUp);
}

이 코드는 매우 짧으며 다양한 브라우저에서 원활하게 실행될 수 있습니다.

실제로 구현 원리는 매우 간단하며 대략 세 단계로 나눌 수 있습니다.

①모달 폼의 헤드 부분에서 마우스를 클릭(mousedown)하면 즉시 mousemove 및 mouseup 이벤트를 문서에 바인딩합니다

② 마우스가 튕기지 않을 때(no mouseup) 폼 내에서 마우스가 이동하면 mouseMove 기능이 활성화되고, 마우스 이동 거리를 계산하여 폼 전체의 위치가 시간에 맞춰 이동됩니다.

③마우스가 위로 튀어오르면(mouseup) mouseUp 이벤트를 호출하여 문서에 바인딩된 mousemove 이벤트와 mouseup 이벤트를 바인딩 해제합니다.

전체 프로세스의 원리는 마우스를 눌렀을 때 마우스 이동 이벤트가 문서에 전달되고 문서의 마우스 이동 이벤트를 통해 전체 양식이 처리되는 것입니다.

추가로, mouseMove에는 약간의 트릭이 있습니다. 즉, 전역 left 및 top 변수는 마우스가 마지막으로 멈췄을 때의 위치를 ​​기록하고, 다음에는 마우스 위치를 left 및 top 변수와 비교합니다. 이동 시간에 따라 마우스가 이동한 정도를 결정합니다. 그에 따라 전체 모달 하위 양식을 이동합니다.

이 코드 조각을 분석한 결과 마우스로 문서의 양식이나 요소를 이동하는 것이 매우 쉽다는 것을 알았습니다

예를 들어 드래그 앤 드롭으로 양식의 크기를 변경하려면 mouseMove 이벤트 핸들러 함수에서 양식의 크기만 조정하면 됩니다. 또 다른 작은 트릭을 배웠나요? 앞으로 나아갈까?

어떤 사람들은 setCapture와 releaseCapture가 각각 무엇을 하는지 묻습니다. 사실 이는 IE와의 호환성을 위한 것입니다. IE에만 ​​이 두 가지 기능이 있습니다. 여기서는 IE를 경멸합니다. setCapture를 사용하면 현재 요소가 모든 마우스 이벤트를 캡처할 수 있습니다. 이를 사용하지 않으면 IE 브라우저와 호환되지 않을 수 있습니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Win11에서 작업 표시줄 축소판 미리 보기를 비활성화하는 방법은 마우스를 움직여 작업 표시줄 아이콘 표시 축소판 기술입니다. Win11에서 작업 표시줄 축소판 미리 보기를 비활성화하는 방법은 마우스를 움직여 작업 표시줄 아이콘 표시 축소판 기술입니다. Feb 29, 2024 pm 03:20 PM

Win11에서 작업 표시줄 축소판 미리 보기를 비활성화하는 방법은 마우스를 움직여 작업 표시줄 아이콘 표시 축소판 기술입니다.

appdata 폴더를 D 드라이브로 옮길 수 있나요? appdata 폴더를 D 드라이브로 옮길 수 있나요? Feb 18, 2024 pm 01:20 PM

appdata 폴더를 D 드라이브로 옮길 수 있나요?

HP, Professor 1 3가지 모드 소프트 마우스 출시: 4000DPI, Blue Shadow RAW3220, 초기 가격 99위안 HP, Professor 1 3가지 모드 소프트 마우스 출시: 4000DPI, Blue Shadow RAW3220, 초기 가격 99위안 Apr 01, 2024 am 09:11 AM

HP, Professor 1 3가지 모드 소프트 마우스 출시: 4000DPI, Blue Shadow RAW3220, 초기 가격 99위안

Razer | Pokémon Gengar 무선 마우스 및 마우스 패드가 현재 1,549위안의 가격으로 출시되었습니다. Razer | Pokémon Gengar 무선 마우스 및 마우스 패드가 현재 1,549위안의 가격으로 출시되었습니다. Jul 19, 2024 am 04:17 AM

Razer | Pokémon Gengar 무선 마우스 및 마우스 패드가 현재 1,549위안의 가격으로 출시되었습니다.

VGN 공동 브랜드 'Elden's Circle' 키보드 및 마우스 시리즈 제품이 이제 출시되었습니다: Lani / Faded One 맞춤형 테마, 99위안부터 시작 VGN 공동 브랜드 'Elden's Circle' 키보드 및 마우스 시리즈 제품이 이제 출시되었습니다: Lani / Faded One 맞춤형 테마, 99위안부터 시작 Aug 12, 2024 pm 10:45 PM

VGN 공동 브랜드 'Elden's Circle' 키보드 및 마우스 시리즈 제품이 이제 출시되었습니다: Lani / Faded One 맞춤형 테마, 99위안부터 시작

Razer 마우스 드라이버는 어떤 폴더에 있나요? Razer 마우스 드라이버는 어떤 폴더에 있나요? Mar 02, 2024 pm 01:28 PM

Razer 마우스 드라이버는 어떤 폴더에 있나요?

6000mAh 실리콘 음극 배터리! Xiaomi 15Pro 업그레이드가 다시 유출되었습니다. 6000mAh 실리콘 음극 배터리! Xiaomi 15Pro 업그레이드가 다시 유출되었습니다. Jul 24, 2024 pm 12:45 PM

6000mAh 실리콘 음극 배터리! Xiaomi 15Pro 업그레이드가 다시 유출되었습니다.

Microsoft Word에서는 마우스를 사용하여 텍스트를 선택하거나 강조 표시할 수 없습니다. Microsoft Word에서는 마우스를 사용하여 텍스트를 선택하거나 강조 표시할 수 없습니다. Feb 20, 2024 am 09:54 AM

Microsoft Word에서는 마우스를 사용하여 텍스트를 선택하거나 강조 표시할 수 없습니다.

See all articles