canvas實(shí)現(xiàn)圖像放大鏡
更新時(shí)間:2017年02月06日 15:51:57 投稿:lijiao
這篇文章主要為大家詳細(xì)為大家詳細(xì)介紹了canvas實(shí)現(xiàn)圖像放大鏡的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了canvas實(shí)現(xiàn)圖像放大鏡的具體代碼,供大家參考,具體內(nèi)容如下
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>canvas-放大鏡</title> <style> body{ padding: 0px; margin: 0px; } #canvas{ border: 1px solid red; margin: 100px; } </style> </head> <body> <canvas id="canvas" width="800px" height="500px"> </canvas> <script> //獲取到canvas元素 var canvas = document.getElementById('canvas'); //獲取canvas中的畫圖環(huán)境 var context = canvas.getContext('2d'); var img = new Image(); img.src = "./image/liuyifei.jpg"; window.onload = function(){ //獲取放大鏡 getfangdajing(context,canvas,img,150,2); } /* * context:繪制環(huán)境對象, * element:canvas元素對象 * img:圖片對象 * diameter:放大鏡的大小, * ratio:圖形的放大比例, * (比例 = 原圖 :鏡中圖像)0<ratio<1縮小圖像,ratio>1放大圖像 * */ function getfangdajing(context,element,img,diameter,ratio){ //繪制圖片 context.drawImage(img,0,0,element.width,element.height); //鼠標(biāo)在element中移動(dòng)觸發(fā)事件 element.onmousemove = function (e){ context.clearRect(0,0,element.width,element.height); //繪制圖片 context.drawImage(img,0,0,element.width,element.height); //解決瀏覽器兼容問題 var e = e ? e : window.event; //獲取鼠標(biāo)在element元素中的坐標(biāo)值 var cxy = windowToCanvas(element,e.clientX,e.clientY); context.save();//保存當(dāng)前繪制環(huán)境 //獲取放大鏡 getClip(context,cxy.x,cxy.y,diameter/2); //將內(nèi)容放入到放大鏡中顯示 //根據(jù)鼠標(biāo)點(diǎn)的坐標(biāo)值計(jì)算出在原圖的坐標(biāo)值 var ytx0=img.width/element.width*cxy.x;//計(jì)算出鼠標(biāo)在原圖的X坐標(biāo)值 var yty0=img.height/element.height*cxy.y//計(jì)算出鼠標(biāo)在原圖的Y坐標(biāo)值 //(原圖形/顯示圖形比例)* (放大鏡直徑/比例= 鏡中的圖形所占大?。? 原圖要截取的圖像大小 var ytclipValueW = img.width/element.width*diameter/ratio;//在原圖截取圖片的寬度 var ytclipValueH = img.height/element.height*diameter/ratio;//在原圖截取圖片的寬度 //.drawImage(圖像對象,原圖像截取的起始X坐標(biāo),原圖像截取的起始Y坐標(biāo),原圖像截取的寬度,原圖像截取的高度, // 繪制圖像的起始X坐標(biāo),繪制圖像的起始Y坐標(biāo),繪制圖像所需要的寬度,繪制圖像所需要的高度); context.drawImage(img,ytx0-ytclipValueW/2,yty0-ytclipValueH/2,ytclipValueW,ytclipValueH,cxy.x-diameter/2,cxy.y-diameter/2,diameter,diameter); context.restore();//恢復(fù)當(dāng)前保存的繪制環(huán)境 } } /* * 獲取放大鏡框:進(jìn)行圖層切割 * context:繪制環(huán)境對象 * x:鼠標(biāo)在畫布中的X坐標(biāo) * y:鼠標(biāo)在畫布中的Y坐標(biāo) * r:放大鏡的直徑 * */ function getClip(context,x,y,r){ context.beginPath(); context.arc(x,y,r,0,Math.PI*2,false); context.stroke(); context.clip();//沿形狀切除向外的圖層 } /* * 坐標(biāo)轉(zhuǎn)換:將window中的坐標(biāo)轉(zhuǎn)換到元素盒子中的坐標(biāo),并返回(x,y)坐標(biāo) * element:canvas元素對象 * x:鼠標(biāo)在當(dāng)前窗口X坐標(biāo)值 * y:鼠標(biāo)在當(dāng)前窗口Y坐標(biāo)值 * */ function windowToCanvas(element,x,y){ //獲取當(dāng)前鼠標(biāo)在window中的坐標(biāo)值 // alert(event.clientX+"-------"+event.clientY); //獲取元素的坐標(biāo)屬性 var box = element.getBoundingClientRect(); var bx = x - box.left; var by = y - box.top; return {x:bx,y:by}; } </script> </body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用JS解析excel文件的完整實(shí)現(xiàn)步驟
解析excel文件是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)需求,下面這篇文章主要給大家介紹了關(guān)于使用JS解析excel文件的完整實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10JS實(shí)現(xiàn)表單多文件上傳樣式美化支持選中文件后刪除相關(guān)項(xiàng)
在項(xiàng)目開發(fā)中我們經(jīng)常遇到文件上傳的功能,根據(jù)需求有多文件上傳和單文件上傳,今天小編給大家實(shí)例講解下表單多文件上傳樣式美化支持選中文件后刪除相關(guān)項(xiàng),非常不錯(cuò),感興趣的朋友一起看看吧2016-09-09CheckBox多選取值及判斷CheckBox選中是否為空的實(shí)例
下面小編就為大家?guī)硪黄狢heckBox多選取值及判斷CheckBox選中是否為空的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10實(shí)現(xiàn)png圖片和png背景透明(支持多瀏覽器)的方法
Firefox和Opera對PNG的支持非常的好,都是IE卻無視PNG圖片這一特性的“存在”,雖然IE7已經(jīng)支持都是IE6還是不行。2009-09-09利用JavaScript實(shí)現(xiàn)一個(gè)日期范圍選擇器
日期范圍選擇器是一個(gè)常見的Web應(yīng)用功能,它允許用戶選擇一個(gè)日期范圍,本文我們將使用JavaScript來實(shí)現(xiàn)這個(gè)功能,感興趣的小伙伴可以了解下2024-01-01JavaScript截取字符串的2個(gè)函數(shù)介紹
這篇文章主要介紹了JavaScript截取字符串的2個(gè)函數(shù)介紹,它們分別是substring和substr函數(shù),本文用實(shí)例講解了它們的用法,需要的朋友可以參考下2014-08-08