fabricjs - 如何使用 scalecontroler 缩放图像
问题描述
移动缩放控制器时无法缩放图像。它显示以下错误:
Uncaught TypeError: canvas.requestRenderAll is not a function
可以请任何人帮助解决这个问题吗?我希望为图像实现功能,请参阅此。这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Instagram</title>
<script type="text/javascript" src="fabric.js-1.7.21/dist/fabric.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
<canvas id="c" width="500px" height="400px"></canvas>
<div id="range">
<input type="range" class="image-scale-lever" step="0.1" max="3" min="0.1" value="1" id="scale-control"></label>
</div>
<script type="text/javascript">
jQuery( document ).ready(function() {
var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Image.fromURL('locket.png', function(oImg) {
oImg.set({
left: 0,
top: 0,
width:500,
height:400
});
canvas.add(oImg);
var scaleControl = $('#scale-control');
scaleControl.oninput = function(x) {
this.val(x);
oImg.scale(parseFloat(x)).setCoords();
canvas.requestRenderAll();
}
function updateControls() {
scaleControl.oninput(oImg.scaleX);
}
canvas.observe("object:scaling", function (e) {
updateControls();
});
});
});
[1]: https://withyoulockets.com/pub/media/catalog/product/cache/image/700x700/e9c3970ab036de70892d86c6d221abfe/k/a/katieopen1100px-min.png
解决方案
这是结果。您需要在 onchange 事件回调中更改对象的比例。
<!DOCTYPE html>
<html>
<head>
<title>Instagram</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.21/fabric.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" >
jQuery( document ).ready(function() {
var canvas = this.__canvas = new fabric.Canvas('c');
fabric.Image.fromURL('https://withyoulockets.com/pub/media/catalog/product/cache/image/700x700/e9c3970ab036de70892d86c6d221abfe/k/a/katieopen1100px-min.png', function(oImg) {
oImg.set({
left: 0,
top: 0,
width:500,
height:400
});
canvas.add(oImg);
var scaleControl = $('#scale-control');
scaleControl.on("change",function() {
var newValue = this.value;
oImg.scale(parseFloat(newValue)).setCoords();
canvas.renderAll();
})
function updateControls() {
scaleControl.oninput(oImg.scaleX);
}
canvas.observe("object:scaling", function (e) {
updateControls();
});
});
});
</script>
<body>
<canvas id="c" width="500px" height="400px"></canvas>
<div id="range">
<input type="range" class="image-scale-lever" step="0.1" max="3" min="0.1" value="1" id="scale-control"></label>
</div>
推荐阅读
- mysql - 带有 XA 数据源的 JBoss 7.2
- gradle - artifactoryPublish 与 publish 的优缺点是什么
- vue.js - NuxtJS runtimeConfig 在构建时保存到单个 js 文件?
- docker - 通过 Intellij 的 Tomcat/Docker 说...“找不到 /Users/blah/yadda/tomcat/bin/setclasspath.sh 这个文件是运行这个程序所必需的”
- python - PySpark 处理结构化流中的时间间隔
- python - 将一个数据帧分成多个数据帧
- java - 我将我的 java 连接到 mysql,我的问题是如何使用此查询按字段名搜索?感谢您提前回答
- c - 如何在二进制文件C中查找字节
- git - 提交添加到功能分支和主
- javascript - 从特定 IP 地址登录时如何显示按钮?