>  기사  >  웹 프론트엔드  >  jquery 사용자 정의 마우스 오른쪽 버튼 클릭 메뉴, 모두 선택, 불연속 Selection_jquery

jquery 사용자 정의 마우스 오른쪽 버튼 클릭 메뉴, 모두 선택, 불연속 Selection_jquery

WBOY
WBOY원래의
2016-05-16 15:12:421216검색

최근에는 프로젝트에서 마우스 오른쪽 버튼 클릭 메뉴, 모두 선택, 불연속 선택 등 몇 가지 사용자 정의 효과를 구현해야 합니다. 가장 중요한 것은 로직과 이벤트 관계를 명확히 하는 것이라고 생각합니다. 이를 달성하기 위해 jQuery UI의 선택 가능과 같은 기성 플러그인도 사용할 수 있습니다.

1. 우클릭 메뉴
웹을 탐색할 때 마우스 오른쪽 버튼을 클릭하거나(또는 터치패드에서 Ctrl+왼쪽 클릭) 다음과 같이 브라우저의 기본 오른쪽 클릭 메뉴 항목이 나타납니다.

그러나 다음과 같이 요소를 마우스 오른쪽 버튼으로 클릭하여 사용자 정의하려는 경우:

먼저 브라우저의 기본 메뉴를 비활성화하고 contextmenu 이벤트를 수신해야 합니다.

$(function(){
 $('#box').on('contextmenu',function(event){
 event.preventDefault();
  $(this).trigger('click');
  $('#menulist').css({
   top: event.pageY,
   left: event.pageX
  });
 });
 $('#box').click(function(){
  $('#menulist').css('display','block');
 });
})

2. 모두 선택
기본 ctrl+A(MAC에서는 command+A)를 누르면 전체 웹페이지나 집중적으로 편집 가능한 요소가 선택됩니다.

<div id='box'>
 <p class='first'>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
</div>
<div id='other'>
 <p class='first'>这是另外一个div,这是另外一个div,</p>
 <p>这是另外一个div,这是另外一个div,</p>
 <p>这是另外一个div,这是另外一个div,</p>
 <p>这是另外一个div,这是另外一个div,</p>
</div>

페이지에 이 두 개의 div만 있는 경우 ctrl/cmd+A를 누르면 두 div가 모두 선택됩니다. div#box의 콘텐츠만 선택하려는 경우 간단한 방법은 contentEditable=true를 추가하는 것입니다. 사업부. 또 다른 방법은 키보드 이벤트를 수신하는 것입니다.

div#box의 모든 하위 요소 p를 선택하고 강조 표시하는 것을 시뮬레이션합니다.

$(function(){
 $(document).keydown(function(event){
 //windows下是event.ctrlKey
 if(event.metaKey && event.which === 65){
  event.preventDefault();
  $('#box>p').trigger('click');
 }
 });
 $('#box').on('click', 'p', function(){
 $(this).css('color','red');
 });
});

3. Shift를 사용하면 연속 선택이 가능합니다
Shift 키를 마우스 오른쪽 버튼과 결합하여 요소를 연속적으로 선택할 수 있으며, 이는 여기에서 간단히 시뮬레이션됩니다.

<div id='box' class="unselect">
 <p class='first'>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
 <p>这是个div,这是个div,</p>
</div>

Shift를 누르고 있으면 브라우저에 기본 연속 선택이 있으므로 먼저 비활성화하세요.

.unselect{
 -webkit-user-select: none;
 -moz-user-select: none;
 -ms-user-select: none;
 -o-user-select: none;
 user-select: none;
}

낮은 버전의 IE의 경우 selectstart 이벤트를 사용하세요.

$('#box')[0].onselectstart = function(e){
  e.preventDefault();
  return false;
 };

p에 대한 클릭 이벤트를 등록하고 문서 개체의 keydown 및 keyup 이벤트를 수신합니다.

$(document).keydown(function(e){
  if(e.shiftKey){
   shiftkey = 1;
  }
 }).keyup(function(){
  shiftkey = 0;
 });
$('#box').on('click','p',function(){
  if(shiftkey === 1){
   second = $(this).index();
   for(var min = Math.min(first,second); min <= Math.max(first,second); min++){
    $('#box').find('p').eq(min).css('color','red');
   }
  } else {
   first = $(this).index();
   $(this).css('color','red').siblings().css('color','black');
  }
 })

4. 불연속 선택
연속 선택을 하려면 Ctrl 키(Mac에서는 Command 키)를 모니터링하고 요소에 대한 클릭 이벤트를 등록해야 합니다.

 $(document).keydown(function(e){
  if(e.metaKey){ //win是e.ctrlKey
   ctrlkey = 2;
  }
 }).keyup(function(){
  ctrlkey = 0;
 });
 $('#box').on('click','p',function(){
  if(ctrlkey === 2){
   $(this).css('color','red');
  } else {
   $(this).css('color','red').siblings().css('color','black');
  }
 })

위 내용은 이 글의 전체 내용입니다. jquery 프로그래밍을 배우는 모든 분들께 도움이 되기를 바랍니다.

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