커서 드래그로 텍스트/요소 선택을 방지하려면 어떻게 해야 합니까?
저는 페이징 컨트롤을 만들었고 버튼을 클릭하는 동안 실수로 개별 이미지와 텍스트를 선택하는 것이 매우 쉽다는 것을 알게 되었습니다.이것을 방지할 수 있습니까?
선택을 명확히 하기 위해서 마우스로 강조 표시하는 것을 의미합니다.(화면의 한쪽에서 다른 쪽으로 마우스를 끌어 봅니다.)
이 그리드에서 텍스트/컨트롤을 강조 표시하려고 하면 선택할 수 없습니다.어떻게 된거죠? 링크
마우스 다운 이벤트에서 초기화 및 후속 마우스 이동에 대한 업데이트를 모두 드래그 및 선택합니다.드래그를 시작하거나 마우스를 따라가도록 이벤트를 처리할 때 이벤트 버블링을 취소하고 기본 브라우저 반환을 재정의합니다.
마우스를 끌고 핸들러를 움직이기 시작할 때 이런 일이...
e=e || window.event; pauseEvent(e);
function pauseEvent(e){
if(e.stopPropagation) e.stopPropagation();
if(e.preventDefault) e.preventDefault();
e.cancelBubble=true;
e.returnValue=false;
return false;
}
드래그의 경우, 당신은 다음과 같은 것을 포착하고 있습니다.mousedown
그리고.mousemove
(그리고 바라건대)touchstart
그리고.touchmove
터치 인터페이스를 지원하기 위한 이벤트도 제공됩니다.)
전화를 해야합니다.event.preventDefault()
양방에down
그리고.move
브라우저가 텍스트를 선택하지 못하도록 하기 위한 이벤트입니다.
예를 들어(jQuery 사용):
var mouseDown = false;
$(element).on('mousedown touchstart', function(event) {
event.preventDefault();
mouseDown = true;
});
$(element).on('mousemove touchmove', function(event) {
event.preventDefault();
if(mouseDown) {
// Do something here.
}
});
$(window.document).on('mouseup touchend', function(event) {
// Capture this event anywhere in the document, since the mouse may leave our element while mouse is down and then the 'up' event will not fire within the element.
mouseDown = false;
});
이것은 아주 오래된 게시물입니다.그 상황에 정확히 답하지는 못하겠지만, 저는 CSS를 제 솔루션에 사용합니다.
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
코멘트를 하고 싶었지만 평판이 좋지 않습니다.@kennebec에서 제안한 함수를 사용하면 자바스크립트 드래깅 라이브러리의 문제가 해결되었습니다.흠잡을 데 없이 효과가 있습니다.
function pauseEvent(e){
if(e.stopPropagation) e.stopPropagation();
if(e.preventDefault) e.preventDefault();
e.cancelBubble=true;
e.returnValue=false;
return false;
}
나는 그것을 내 마우스 다운과 마우스 무브 사용자 지정 기능에서 호출했고, 인식한 직후에 올바른 요소를 클릭했습니다.만약 내가 그것을 단지 기능 위에 호출한다면 나는 문서를 클릭할 때 아무 것이나 죽일 뿐입니다.제 기능은 document.body에 이벤트로 등록되어 있습니다.
시도해 보십시오.
document.onselectstart = function()
{
window.getSelection().removeAllRanges();
};
이것은 대부분의 브라우저에서 CSS를 사용하여 달성될 수 있습니다.unselectable
IE에서 확장합니다.여기서 답변 보기:CSS를 사용하여 텍스트 선택 강조를 비활성화하는 방법?
자바스크립트를 사용하여 특정 요소에 대한 텍스트 선택을 차단해야 할 경우, 가장 간단한 방법은 userSelect style을 할당하는 것이었습니다.
var myElement = document.createElement('div');
myElement.style.userSelect = 'none';
다음과 같이 선택하면 블러 함수를 호출하여 간단히 방지할 수 있습니다.
<input Value="test" onSelect="blur();">
이 코드를 어디 자바스크립트에 붙여넣기만 하면 됩니다.
document.onmousemove = function(evt){
event.preventDefault();
}
방금 https://www.colorzilla.com/gradient-editor/ 에서 디버깅해서 콘솔에서 테스트해봤는데, 더 이상 원하지 않는 UI를 선택하지 않고...
저에게 잘 작동하는 것은 onselect start 이벤트가 실행되지 않는 한 마우스 이동 이벤트에서 Default를 방지하는 것입니다.
const handler = event => event.preventDefault();
document.onmousedown = () => document.addEventListener("mousemove", handler);
document.onmouseup = () => document.removeEventListener("mousemove", handler);
document.onselectstart = () => document.removeEventListener("mousemove", handler);
Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ, user-select: auto
.
11년 후, 저는 이것이 누군가에게 도움이 되길 바랍니다!
언급URL : https://stackoverflow.com/questions/5429827/how-can-i-prevent-text-element-selection-with-cursor-drag
'programing' 카테고리의 다른 글
행 자체의 수량 필드를 기준으로 동일한 행을 여러 개 반환하려면 어떻게 해야 합니까? (0) | 2023.09.16 |
---|---|
What Runtime예외적으로 Spring Crud Repository가 던질 수 있습니까? (0) | 2023.09.11 |
'MySql'에 대한 엔티티 프레임워크 제공자를 찾을 수 없습니다.데이터, MySql Client' ADO.NET 프로바이더 (0) | 2023.09.11 |
realoc() 전에 malloc()이 필요합니까? (0) | 2023.09.11 |
C/C++ stdlib 명명 규칙의 이름은? (0) | 2023.09.11 |