淘宝放大镜

HTML
1     <img src="img/eddbc6f71def8b33d207222b32a6d1f9.jpg">
2     <canvas id="can" width="200px" height="200px"></canvas>
3     <div id="div"></div>    
CSS
1 <style type="text/css">    
 2         body{
 3             margin: 0;
 4             padding: 0;
 5         }    
 6         canvas{
 7             border: 1px solid;
 8             position: absolute;
 9             left: 350px;
10             top: 50px;
11         }
12         div{
13             background: rgba(117, 240, 255, 0.5);
14             width: 100px;
15             height: 100px;
16             position: absolute;    
17             cursor: crosshair;    
18             display: none;    
19         }
20         img{
21             width: 300px;
22             height: 200px;
23             margin: 50px 0 0 50px;
24         }
25     </style>
/*效果图如下*/
 
JS
<script type="text/javascript">
        onload = function () {
            var img = document.getElementsByTagName("img")[0];
            var canvas =document.getElementById("can")
            var cxt = canvas.getContext("2d");
            var div = document.getElementById("div")
            var news = img.getBoundingClientRect();
            var obj = {};
            var max = img.naturalWidth / img.width
            console.log(max);
            window.onmousemove = function (event) {
                var e = e || event;
                var x = e.clientX;
                var y = e.clientY
                if (x >= news.left && x <= news.right && y >= news.top && y <= news.bottom) {
                    objaa(x,y)
                }else {
                    hide()
                }
            }
            function objaa(x,y) {
                x = x - 50 < news.left ? news.left : x - 50;
                y = y - 50 < news.top ? news.top : y - 50;
                x = x + 100 < news.right ? x : news.right - 100;
                y = y + 100 < news.bottom ? y : news.bottom - 100;
                obj.left = x;
                obj.top = y;
                num(x,y)
            }
            function num(x, y) {
                // 设置选择框偏移位置
                div.style.left = x + "px";
                div.style.top = y + "px";
                show();
                draw();
            }
            //显示
            function show() {
                div.style.display = "block"    
                canvas.style.display = "block"    
            }
            //隐藏
            function hide() {
                div.style.display = "none"        
                canvas.style.display = "none"    
            }
            //放大
            function draw() {
                var left = obj.left - news.left 
                var top = obj.top - news.top
                            //图片      裁剪X,     裁剪Y  裁剪的宽            高        绘画的X,Y   绘画的宽                        高
                cxt.drawImage(img,left*max,top*max,max*100,max*100,0,0,canvas.width,canvas.height)
            }
        }
    </script>

原文地址:https://www.cnblogs.com/yang1997/p/12194957.html