亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

不能出現放大鏡效果。

<!DOCTYPE html>
<html>
<head lang="en">
? ?<meta charset="UTF-8">
? ?<title></title>
</head>
<style>
body {
? ? ? ?background: #000;
}
? ?#canvas {
? ? ? ?display: block;
margin: 0px auto;
border: 1px solid #aaaaaa;
}
? ?#scale-range {
? ? ? ?display: block;
margin: 20px auto;
width: 800px;
}
? ?#off-canvas {
? ? ? ?display: none;
}
</style>
<body>
<canvas id="canvas">你的瀏覽器尚不支持canvas</canvas>
<canvas id="off-canvas">你的瀏覽器尚不支持canvas</canvas>
<script>

var canvas = document.getElementById("canvas");
var offCanvas = document.getElementById("off-canvas");

var context = canvas.getContext("2d");
var offContext = canvas.getContext("2d");

var image = new Image();

var isMouseDown = false;
var scale;

window.onload = function() {

canvas.width = 1152;
canvas.height = 768;

image.src = "images/img-lg.jpg";
? ? ? ?
image.onload = function () {

offCanvas.width = image.width;
offCanvas.heigth = image.height;
scale = offCanvas.width / canvas.width;

context.drawImage(image, 0, 0, canvas.width, canvas.height);
offContext.drawImage(image, 0, 0);
? ? ? ?}
? ?}

function windowToCanvas(x, y) {

var bbox = canvas.getBoundingClientRect();
return {
x: x - bbox.left,
y: y - bbox.top
}

? ?}
? ?
canvas.onmousedown = function (e) {

e.preventDefault();
// ? ? ? ?console.log(e.clientX, e.clientY);
point = windowToCanvas(e.clientX, e.clientY);
// ? ? ? ?console.log(point.x, point.y);
isMouseDown = true;
drawCanvasWidthMagnifier(true, point);
? ?}

canvas.onmouseup = function (e) {

e.preventDefault();
isMouseDown = false;
drawCanvasWidthMagnifier(false);

? ?}

canvas.onmouseout = function (e) {

e.preventDefault();
isMouseDown = false;
drawCanvasWidthMagnifier(false);

? ?}

canvas.onmousemove = function (e) {

e.preventDefault();
if (isMouseDown == true) {
point = windowToCanvas(e.clientX, e.clientY);
// ? ? ? ? ? ?console.log(point.x, point.y);
drawCanvasWidthMagnifier(true, point);
? ? ? ?}

? ?}

function drawCanvasWidthMagnifier(isShowMagnifier, point) {

context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(image, 0, 0, canvas.width, canvas.height);
if(isShowMagnifier == true) {

drawMagnifier(point);

? ? ? ?}
? ?}

function drawMagnifier(point) {

var imageLG_cx = point.x * scale;
var imageLG_cy = point.y * scale;

var mr = 200;

var sx = imageLG_cx - mr;
var sy = imageLG_cy - mr;

var dx = point.x - mr;
var dy = point.y - mr;

context.drawImage(offCanvas, sx, sy, 2*mr, 2*mr, dx, dy, 2*mr, 2*mr);

? ?}

</script>
</body>
</html>

請大神們幫忙看看是哪里寫錯了,拜托拜托。

正在回答

2 回答

<!doctype?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Document</title>
</head>
<body>
<canvas?id="canvas"?style="border:1px?solid?#aaa;display:block;margin:0?auto;"></canvas>

<canvas?id="offCanvas"?style="display:none"></canvas>


<div?style="margin:20px?auto;text-align:center;">點擊更換放大鏡邊框顏色:
<a?href="#"?onclick="colorGreen()"?style="color:green">綠色</a>
<a?href="#"?onclick="colorRed()"?style="color:red">紅色</a>
<a?href="#"?onclick="colorBlue()"?style="color:Blue">藍色</a>
<a?href="#"?onclick="colorRandom()"?style="color:#909">隨機</a>
</div>
<script?type="text/javascript">
var?canvas=document.getElementById("canvas");
var?context=canvas.getContext("2d");

var?offCanvas=document.getElementById("offCanvas");
var?offContext?=?offCanvas.getContext("2d");


var?image?=new?Image();
var?isMouseDown?=false;//鼠標是否點擊
var?scale;?//放大倍數
var?color="#666";//放大鏡顏色

window.onload=?function(){
??canvas.width?=?1152
????????????canvas.height?=?768



image.src="img.jpg"
image.onload=function(){
offCanvas.width?=image.width;
offCanvas.height?=?image.height;
scale?=?offCanvas.width?/?canvas.width;

context.drawImage(image,0,0,canvas.width,canvas.height);

??offContext.drawImage(image,0,0);
}
}

//坐標轉換
function?windowToCanvas(x,y){
//獲得canvas的包圍盒
var?bbox?=?canvas.getBoundingClientRect();
return?{x:x-bbox.left,y:?y?-bbox.top}
drawCanvasWithMagnifier(?true,?point);
}
????//鼠標點擊事件
canvas.onmousedown?=function(e){
e.preventDefault()

var?point?=windowToCanvas(e.clientX,e.clientY);?//鼠標點擊位置
console.log(point.x,point.y);
isMouseDown?=true;
drawCanvasWithMagnifier(?true,?point);


}

//點擊鼠標左鍵同時移動鼠標事件
canvas.onmousemove?=function(e){
e.preventDefault()//禁止默認響應事件
if(?isMouseDown?==true){
var??point?=?windowToCanvas(e.clientX,e.clientY)
console.log(point.x,point.y);

drawCanvasWithMagnifier(?true,?point);
}
}
??//鼠標松開事件
canvas.onmouseup?=function(e){
e.preventDefault()//禁止默認響應事件
isMouseDown?=false;

drawCanvasWithMagnifier(false);
}
//鼠標離開canvas畫布事件
canvas.onmouseout?=function(e){
e.preventDefault()//禁止默認響應事件
isMouseDown?=false;

drawCanvasWithMagnifier(?false);
}
//是否繪制放大鏡
function?drawCanvasWithMagnifier(?isShowMagnifier?,?point?){

????????????context.clearRect(?0?,?0?,?canvas.width?,?canvas.height?)
????????????context.drawImage(?image?,?0?,?0?,?canvas.width?,?canvas.height?)
????????????if(?isShowMagnifier?==?true?){
????????????????drawMagnifier(?point?)
????????????}
????????}

function?drawMagnifier(point){
//圖片放大之后的坐標
var?imageLG_cx?=?point.x*?scale?
var?imageLG_cy?=?point.y*?scale

var?mr?=?200?//放大鏡的半徑
//放大鏡的起始坐標
var?sx?=?imageLG_cx?-?mr;
var?sy?=?imageLG_cy?-?mr;

var?dx?=?point.x?-?mr;
var?dy?=?point.y?-?mr;
context.save();
context.lineWidth=?10.0;
context.strokeStyle=color;
context.beginPath();
context.arc(point.x,point.y,mr,0,2*Math.PI);
context.stroke();

context.clip();

context.drawImage(offCanvas,sx,sy,2*mr,2*mr,dx,dy,2*mr,2*mr);

context.restore();
}


function?colorRed(){

color="red";

}

function?colorGreen(){
color="green";
}

function?colorBlue(){
color="blue";
}
function?colorRandom(){
var?color1=Math.ceil(Math.random()*255);
???var?color2=Math.ceil(Math.random()*255);
var?color3=Math.ceil(Math.random()*255);
color="rgb("+color1+","+color2+","+color3+")";

}
</script>
}
</body>
</html>

你可以參考下

1 回復 有任何疑惑可以回復我~
#1

qq_顆粒_0 提問者

非常感謝!
2016-10-21 回復 有任何疑惑可以回復我~

輸出一下scale;看是不是等于1,等于1的話會和原圖貼合,這就是看不到效果的原因.圖片的寬高必須要比canvas的寬高大的才能看出放大效果

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

不能出現放大鏡效果。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號