js canvas實現(xiàn)放大鏡查看圖片功能
更新時間:2017年06月08日 15:43:50 作者:我在世界的盡頭想你
這篇文章主要為大家詳細介紹了js canvas實現(xiàn)放大鏡查看圖片功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了canvas實現(xiàn)放大鏡查看圖片功能的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body style="background: black;">
<canvas id="myCanvas" style="display: block;margin: 0px auto;border: 10px solid #aaa ">
你的瀏覽器不支持canvas
</canvas>
<canvas id="offCanvas" style="display: none"></canvas>
<script>
var myCanvas = document.getElementById("myCanvas");
var context = myCanvas.getContext("2d");
var offCanvas = document.getElementById("offCanvas");
var offContext = offCanvas.getContext("2d");
var isMouseDown = false;
var scale;
var image = new Image();
window.onload = function () {
myCanvas.width = 300;
myCanvas.height = 200;
image.src = "1.jpg";
image.onload = function () {
offCanvas.width = image.width;
offCanvas.height = image.height;
scale = offCanvas.width / myCanvas.width ;
context.drawImage(image,0,0,myCanvas.width,myCanvas.height);
offContext.drawImage(image,0,0);
}
};
function windowToCanvas(x,y) {
var bbox = myCanvas.getBoundingClientRect();
return { x : x - bbox.left , y : y - bbox.top};
}
myCanvas.onmousedown = function (e) {
e.preventDefault();
var point = windowToCanvas(e.clientX , e.clientY);
console.log(point);
isMouseDown = true;
drawCanvasWithMagnifier( true , point );
};
myCanvas.onmousemove = function (e) {
e.preventDefault();
if (isMouseDown ){
var point = windowToCanvas(e.clientX , e.clientY);
drawCanvasWithMagnifier( true , point );
}
};
myCanvas.onmouseup = function (e) {
e.preventDefault();
isMouseDown = false;
drawCanvasWithMagnifier( false );
};
myCanvas.onmouseout = function (e) {
e.preventDefault();
isMouseDown = false;
drawCanvasWithMagnifier( false );
};
function drawCanvasWithMagnifier( isShowMagnifier , point) {
context.clearRect(0,0,myCanvas.width,myCanvas.height);
context.drawImage(image,0,0,myCanvas.width,myCanvas.height);
if(isShowMagnifier == true ){
drawMagnifier( point );
}
}
function drawMagnifier( point ) {
var imageLG_cx = point.x * scale ;
var imageLG_cy = point.y * scale ;
var mr = 20 ;
var sx = imageLG_cx - mr ;
var sy = imageLG_cy - mr ;
var dx = point.x - mr ;
var dy = point.y - mr ;
context.save();
context.lineWidth = 5.0;
context.strokeStyle = "#069";
context.beginPath();
context.arc(point.x,point.y,mr,0,Math.PI*2);
context.stroke();
context.clip();
context.drawImage(offCanvas,sx,sy,2*mr,2*mr,dx,dy,2*mr,2*mr);
context.restore();
}
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Bootstrap編寫一個在當前網(wǎng)頁彈出可關(guān)閉的對話框 非彈窗
這篇文章主要介紹了Bootstrap編寫一個在當前網(wǎng)頁彈出可關(guān)閉的對話框,不用跳轉(zhuǎn),非彈窗,感興趣的小伙伴們可以參考一下2016-06-06
JavaScript實現(xiàn)獲取最近7天的日期的方法詳解
這篇文章主要想和大家分享一些JavaScript開發(fā)中會用到的小技巧,本文主要介紹了js獲取最近7天的日期,判斷當前日期時間大于指定日期時間等內(nèi)容,需要的可以參考一下2023-04-04
javascript 函數(shù)聲明與函數(shù)表達式的區(qū)別介紹
javascript中的函數(shù)聲明與函數(shù)表達式使用比較頻繁,可能很多的朋友都不知道他們之間的區(qū)別,在此為大家詳細介紹下,希望對大家有所幫助2013-10-10
for循環(huán) + setTimeout 結(jié)合一些示例(前端面試題)
最近在學(xué)習(xí)node.js開發(fā)資料,正好碰到了for循環(huán)+settimeout的經(jīng)典例子,下面小編給大家分享for循環(huán) + setTimeout 結(jié)合一些示例代碼,需要的朋友參考下吧2017-08-08
js操縱跨frame的聯(lián)動select下拉選項實例介紹
運用HTML、CSS以及Javascript相關(guān)知識,編寫多窗口多菜單的內(nèi)容聯(lián)動,具體思路及代碼如下,感興趣的朋友可以參考下哈,希望大家有所幫助2013-05-05
JavaScript利用canvas實現(xiàn)炫酷的碎片切圖效果
這篇文章主要和大家分享一個炫酷的碎片式切圖效果,本文主要利用canvas來實現(xiàn),代碼量不多,但有些地方還是需要花點時間去理解的,感興趣的可以學(xué)習(xí)一下2022-10-10

