어떻게 코드합니까? 마우스가 캔버스의 미리 정의 된 영역에 들어가면 미리 정의 된 영역을 벗어날 때 이미지가 나타나고 이미 미리 정렬 된 영역을 벗어날 때 다시 사라집니다.jQuery- 마우스를 영역 안으로 이동하고 종료하는 캔버스
이것은 모두 jQuery를 사용합니다.
미리 감사드립니다.
어떻게 코드합니까? 마우스가 캔버스의 미리 정의 된 영역에 들어가면 미리 정의 된 영역을 벗어날 때 이미지가 나타나고 이미 미리 정렬 된 영역을 벗어날 때 다시 사라집니다.jQuery- 마우스를 영역 안으로 이동하고 종료하는 캔버스
이것은 모두 jQuery를 사용합니다.
미리 감사드립니다.
jQuery는 캔버스 요소에서 호버/흐림을 추적하지만 캔버스 내부의 개별 그림에서는 추적하지 않습니다. HTML 캔버스에 그려진 이미지는 DOM 요소가 아닙니다. 대신 그들은 캔버스에 그린 픽셀을 잊어 버린 것과 같습니다.
이
는 캔버스 안에 이미지 무승부에 호버 효과를 적용 할 수있는 단계는 다음과 같습니다,
자바 스크립트 객체 이미지의 정의 (x, y, 폭, 높이)를 추적캔버스에서 mousemove 이벤트를 수신
테스트,
마우스가 원을 넣거나 나갈 때 이미지를 다시 그리거나 지 웁니다.
호버/흐림을보다 효율적으로 유지하려면 이전 이미지 상태 (표시 여부/비공개)를 추적하고 상태가 변경되지 않은 경우 아무 것도하지 않습니다.
여기서 예 코드 및 데모 같습니다
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var $canvas=$("#canvas");
var canvasOffset=$canvas.offset();
var offsetX=canvasOffset.left;
var offsetY=canvasOffset.top;
var scrollX=$canvas.scrollLeft();
var scrollY=$canvas.scrollTop();
var lastMouseWasIn;
var currentMouseIsIn=false;
var imgDef={x:30,y:30};
var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/KoolSmall.png";
function start(){
imgDef.width=img.width;
imgDef.height=img.height;
draw();
$("#canvas").mousemove(function(e){handleMouseMove(e);});
}
function draw(){
if(lastMouseWasIn===currentMouseIsIn){return;}
ctx.clearRect(0,0,cw,ch);
if(currentMouseIsIn){
ctx.drawImage(img,imgDef.x,imgDef.y);
}
ctx.strokeRect(imgDef.x,imgDef.y,imgDef.width,imgDef.height);
}
function handleMouseMove(e){
e.preventDefault();
e.stopPropagation();
x=parseInt(e.clientX-offsetX);
y=parseInt(e.clientY-offsetY);
currentMouseIsIn = x>imgDef.x
&& x<imgDef.x+imgDef.width
&& y>imgDef.y
&& y<imgDef.y+imgDef.height;
draw();
lastMouseWasIn=currentMouseIsIn;
}
body{ background-color: ivory; }
#canvas{border:1px solid red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<h4>Move mouse in and out of rectangle to show/hide image.</h4>
<canvas id="canvas" width=300 height=300></canvas>
정말 고마워요. 정말 고마워요. – Danny12345
JQuery와 캔버스 요소 호버/흐림을 추적하지만 캔버스 내부에 개별 도면 것이다. html 캔버스에 그려지는 이미지는 DOM 요소가 아닙니다. 대신 그들은 캔버스에 그린 픽셀을 잊어 버린 것과 같습니다. ** 다음은 캔버스 이미지에 호버 효과를 적용하는 단계입니다. ** (1) 자바 스크립트 객체에서 이미지의 정의 (x, y, 너비, 높이)를 추적합니다. (2) mousemove를 청취합니다. 캔버스 위의 이벤트, (3) 마우스가 이미지 안에 있는지 테스트, (4) 마우스가 원을 넣거나 나갈 때 이미지를 다시 그리거나 지 웁니다. 코딩에 문제가있는 경우 코딩을 시도하고 다시 시도하십시오. – markE
그래, 이미 시도했는데 문제는 내가 공간으로 이동할 때, 미리 정의 된 모양이 나옵니다. 그러나 다음 픽셀로 이동할 때까지 분할 된 부분에 대해서만 나타납니다. 따라서 화려한 이미지를 만들거나 이미지가없는 경우 마우스가 움직이지 않는다. 솔루션에 대한 아이디어가 있습니까? – Danny12345
예, 이전 mousemove가 이미지 내부 또는 외부에 있었는지 여부를 나타내는 lastStatus 플래그를 만드십시오. 그렇게하면 lastStatus가 변경 될 때만 표시하거나 지워야합니다. 이렇게하면 이미지 내부의 모든 마우스를 사용하여 이미지를 다시 그려서 깜박임 현상을 제거 할 수 있습니다. 건배! – markE