gpt4 book ai didi

javascript - 通过按钮而不是鼠标滚轮在 Canvas 中平滑缩放

转载 作者:行者123 更新时间:2023-12-03 12:18:09 25 4
gpt4 key购买 nike

我正在尝试在 Canvas 应用程序中实现平滑缩放之类的功能。

我已经能够使用以下方法缩放到预定义的缩放级别:

 $("#zoomToView").click(function () {
paper.view.zoom=5.0;
});

大多数平滑缩放的示例都与鼠标滚轮实现有关,但我想使用一个按钮来缩放到预定义的级别并返回。

我的印象是该实现与 FOR 循环和某种随着循环计数增加而变大的自适应延迟有关。

有什么想法吗?

我正在使用Paper.js作为我的 Canvas 库,但这不应该成为寻找解决方案的因素。

最佳答案

这是一个使用 native Canvas 的示例,但如果需要,您可以替换 paper.js。

这个概念是连续运行一个动画循环,仅在按钮按下时调整图像大小。

http://jsfiddle.net/SW5jL/3/

示例代码:

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
body{ background-color: ivory; }
canvas{border:1px solid red;}
</style>
<script>
$(function(){

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");

var cw=canvas.width;
var ch=canvas.height;
var iw,ih;

var img=new Image();
img.onload=start;
img.src="https://www.w3schools.com/css/img_fjords.jpg";
function start(){
iw=img.width;
ih=img.height;

$("#test").mousedown(function(){ doAnimation=true; });
$("#test").mouseup(function(){ doAnimation=false; });
$("#test").mouseout(function(){ doAnimation=false; });

requestAnimationFrame(animate);

ctx.drawImage(img,cw/2-iw/2,ch/2-ih/2);

}

var scale=1.00;
scaleDirection=0.01;
var minScale=0.50;
var maxScale=1.50;
var doAnimation=false;

function animate(){

requestAnimationFrame(animate);

if(doAnimation){

ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(img,
0,0,iw,ih,
(cw-iw*scale)/2,(ch-ih*scale)/2,iw*scale,ih*scale
);

scale+=scaleDirection;
if(scale<minScale || scale>maxScale){
scaleDirection*=-1;
scale+=scaleDirection;
}

}

}

}); // end $(function(){});
</script>
</head>
<body>
<button id="test">Animate</button><br>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

关于javascript - 通过按钮而不是鼠标滚轮在 Canvas 中平滑缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com