国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

canvas實現圖像放大鏡

2019-11-19 17:42:47
字體:
來源:轉載
供稿:網友

 本文實例為大家分享了canvas實現圖像放大鏡的具體代碼,供大家參考,具體內容如下

<!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中的畫圖環境     var context = canvas.getContext('2d');      var img = new Image();     img.src = "./image/liuyifei.jpg";      window.onload = function(){       //獲取放大鏡       getfangdajing(context,canvas,img,150,2);     }      /*     *  context:繪制環境對象,     *  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);       //鼠標在element中移動觸發事件       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;         //獲取鼠標在element元素中的坐標值         var cxy = windowToCanvas(element,e.clientX,e.clientY);         context.save();//保存當前繪制環境         //獲取放大鏡         getClip(context,cxy.x,cxy.y,diameter/2);         //將內容放入到放大鏡中顯示         //根據鼠標點的坐標值計算出在原圖的坐標值         var ytx0=img.width/element.width*cxy.x;//計算出鼠標在原圖的X坐標值         var yty0=img.height/element.height*cxy.y//計算出鼠標在原圖的Y坐標值         //(原圖形/顯示圖形比例)* (放大鏡直徑/比例= 鏡中的圖形所占大小)= 原圖要截取的圖像大小         var ytclipValueW = img.width/element.width*diameter/ratio;//在原圖截取圖片的寬度         var ytclipValueH = img.height/element.height*diameter/ratio;//在原圖截取圖片的寬度         //.drawImage(圖像對象,原圖像截取的起始X坐標,原圖像截取的起始Y坐標,原圖像截取的寬度,原圖像截取的高度,         // 繪制圖像的起始X坐標,繪制圖像的起始Y坐標,繪制圖像所需要的寬度,繪制圖像所需要的高度);         context.drawImage(img,ytx0-ytclipValueW/2,yty0-ytclipValueH/2,ytclipValueW,ytclipValueH,cxy.x-diameter/2,cxy.y-diameter/2,diameter,diameter);         context.restore();//恢復當前保存的繪制環境       }     }      /*     * 獲取放大鏡框:進行圖層切割     * context:繪制環境對象     * x:鼠標在畫布中的X坐標     * y:鼠標在畫布中的Y坐標     * r:放大鏡的直徑     * */     function getClip(context,x,y,r){       context.beginPath();       context.arc(x,y,r,0,Math.PI*2,false);       context.stroke();       context.clip();//沿形狀切除向外的圖層     }       /*     * 坐標轉換:將window中的坐標轉換到元素盒子中的坐標,并返回(x,y)坐標     * element:canvas元素對象     * x:鼠標在當前窗口X坐標值     * y:鼠標在當前窗口Y坐標值     * */     function windowToCanvas(element,x,y){       //獲取當前鼠標在window中的坐標值       // alert(event.clientX+"-------"+event.clientY);       //獲取元素的坐標屬性       var box = element.getBoundingClientRect();       var bx = x - box.left;       var by = y - box.top;       return {x:bx,y:by};     }    </script> </body> </html> 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐陵市| 华亭县| 石屏县| 清徐县| 财经| 红河县| 荃湾区| 平舆县| 永川市| 长治市| 河东区| 宝鸡市| 惠来县| 锡林浩特市| 洛川县| 微山县| 丁青县| 云南省| 明水县| 钟山县| 黄陵县| 日喀则市| 肇东市| 迭部县| 东乡| 叶城县| 普安县| 桑植县| 胶南市| 安平县| 文昌市| 清徐县| 沛县| 莱西市| 中江县| 三都| 维西| 通城县| 庆元县| 双鸭山市| 汤原县|