fabricJS 版本 2.2.3
测试jsFiddle
我正在尝试使用 LabeledRect 子类,但我的问题是,每当我尝试从 JSON 加载它时,它都不会呈现,并且在控制台中也没有出现错误。请参阅下面的小提琴。
我怎样才能正确渲染它?我认为我的问题出在 fromObject func 但我不知道在哪里。
/**
* fabric.js template for bug reports
*
* Please update the name of the jsfiddle (see Fiddle Options).
* This templates uses latest dev verison of fabric.js (https://rawgithub.com/kangax/fabric.js/master/dist/fabric.js).
*/
// initialize fabric canvas and assign to global windows object for debug
var canvas = window._canvas = new fabric.Canvas('c');
// ADD YOUR CODE HERE
var json = '{"version":"2.2.3","objects":[{"type":"labeledRect","version":"2.2.3","originX":"left","originY":"top","left":0,"top":0,"width":100,"height":50,"fill":"#faa","stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":1,"scaleY":1,"angle":0,"flipX":false,"flipY":false,"opacity":1,"shadow":null,"visible":true,"clipTo":null,"backgroundColor":"","fillRule":"nonzero","paintFirst":"fill","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0,"label":"1"}]}';
fabric.LabeledRect = fabric.util.createClass(fabric.Rect, {
type: 'labeledRect',
initialize: function(options) …Run Code Online (Sandbox Code Playgroud)我正在尝试使用 FabricJS 画布创建图像canvas.toDataURL();
我有 php 代码,它从这个 datauri 写入实际的图像文件。
此函数从画布创建 base64 数据 uri。在正常分辨率(测试到全高清)下,这会生成我设置的实际尺寸图像(50pxX50px)。但在 4k 分辨率下,它会以某种方式生成双倍尺寸的图像。我尝试设置倍数、高度、宽度选项,但没有成功。
我在这里创建了一个jsfiddle
var canvas = new fabric.Canvas('myCanvas');
canvas.setHeight(50);
canvas.setWidth(50);
canvas.setBackgroundColor('rgb(59,173,160)');
// create a rectangle object
var rect = new fabric.Rect({
left: 0,
top: 0,
fill: 'blue',
width: 20,
height: 20
});
// "add" rectangle onto canvas
canvas.add(rect);
var img = canvas.toDataURL({
format: 'png',
multiplier: 1,
left: 0,
top: 0,
width: 50,
height: 50
});
console.log(img);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.3/fabric.min.js"></script>
<canvas id="myCanvas" style="border: 2px solid red;">
Your browser …Run Code Online (Sandbox Code Playgroud)想要创建一个像这样的功能区:
目前,我的尝试看起来像这样:
这是我写给产品的代码:
.ribbon {
width: 200px;
display:inline-block;
margin:0px; //remove any margins to prevent breaking at each element
box-sizing:border-box; //allow paddings to not interfere with element width
}
.front {
float: left;
display: inline;
width: 45%;
background: #EA0B1D;
border-radius: 6px 0px 0px 6px;
padding-top: 15px;
padding-bottom: 15px;
}
.middle {
float: left;
display: inline;
width: 5%;
background: #B1071D;
padding-top: 15px;
padding-bottom: 15px;
transform: rotate(0deg) skewX(45deg);
-webkit-transform: rotate(0deg) skewX(45deg);
-ms-transform: rotate(0deg) skewX(45deg);
}
.back {
float: right;
display: inline;
width: 45%; …Run Code Online (Sandbox Code Playgroud)var app = angular.module('tabsDemo', ['ngMaterial']);
app.controller('TabsController',tabsController);
function tabsController($scope){
$scope.showBack = false;
//$scope.selectedIndex = 3;
$scope.tabs = [1,2,3,4,5,6];
$scope.changeTabs = function(){
$scope.showBack = true;
$scope.tabs = ['a','b'];
}
$scope.goHome = function(){
$scope.showBack = false;
$scope.tabs = [1,2,3,4,5,6];
$scope.selectedIndex = 3;
}
}Run Code Online (Sandbox Code Playgroud)
<link href="https://rawgit.com/angular/bower-material/master/angular-material.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<script src="https://rawgit.com/angular/bower-material/master/angular-material.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular-animate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular-aria.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
rel="stylesheet">
<div ng-app="tabsDemo" ng-controller="TabsController">
<md-button ng-show = "showBack" ng-click = "goHome()">
<i class="material-icons">keyboard_backspace</i>
</md-button>
<md-tabs md-selected="selectedIndex" md-stretch-tabs>
<md-tab ng-repeat="tab in tabs" label="{{tab}}">
<div style="text-align: center;">
<button …Run Code Online (Sandbox Code Playgroud)我正在开发一个使用Fabric.js库的项目。我想知道如何更改当您想要选择一个或多个对象时出现的正方形/矩形。
就是下图中的蓝色矩形:
我已经在更改一些样式,例如对象选择的角颜色、边框颜色等等:
fabric.Object.prototype.selection = !HelperJSViewBag.getValue("isMobile") && true;
fabric.Object.prototype.selectionColor = HelperJSViewBag.getValue("selectionColor").length > 0 ? HelperJSViewBag.getValue("selectionColor") : 'rgba(255,119,0,0.3)';
fabric.Object.prototype.rotationCursor = HelperJSViewBag.getValue('cursor_rotacao').length > 0 ? HelperJSViewBag.getValue('cursor_rotacao') : "crosshair";
fabric.Object.prototype.cornerSize = HelperJSViewBag.getValue("isMobile") ? (HelperJSViewBag.getValue("containerCornerSizeMobile") > 0 ? HelperJSViewBag.getValue("containerCornerSizeMobile") : 14) : (HelperJSViewBag.getValue("containerCornerSize") > 0 ? HelperJSViewBag.getValue("containerCornerSize") : 10);
fabric.Object.prototype.cornerColor = HelperJSViewBag.getValue("containerCornerColor").length > 0 ? HelperJSViewBag.getValue("containerCornerColor") : '#eee';
fabric.Object.prototype.borderColor = fabric.Object.prototype.cornerColor;
fabric.Object.prototype.transparentCorners = false;
fabric.Object.prototype.borderScaleFactor = HelperJSViewBag.getValue("borderScaleFactor") > 0 ? HelperJSViewBag.getValue("borderScaleFactor") : 1;
fabric.Object.prototype.hasRotatingPoint = !HelperJSViewBag.getValue("isMobile") && true;
fabric.Object.prototype.rotatingPointOffset = HelperJSViewBag.getValue("isMobile") ? …Run Code Online (Sandbox Code Playgroud) 绘制对象并用鼠标修改对象后,坐标(Object.width 和 Object.height)保持与最初绘制的对象相同。
const button = document.querySelector('button');
function load() {
const canvas = new fabric.Canvas('c');
const rect = new fabric.Rect({
width: 100,
height: 100,
left: 10,
top: 10,
fill: 'yellow',
});
function objectAddedListener(ev) {
let target = ev.target;
console.log('left', target.left, 'top', target.top, 'width', target.width, 'height', target.height);
}
function objectMovedListener(ev) {
let target = ev.target;
console.log('left', target.left, 'top', target.top, 'width', target.width, 'height', target.height);
}
canvas.on('object:added', objectAddedListener);
canvas.on('object:modified', objectMovedListener);
canvas.add(rect);
}
load();
button.addEventListener('click', load);
Run Code Online (Sandbox Code Playgroud)
见代码笔
该代码在Fabric js 1.5版中受支持,但在最新版本的Fabric js(如1.7及更高版本)中不支持。有人可以在此代码中为我提供帮助吗?我希望在1.7.21版Fabric中实现它。鼠标坐标在较新版本的结构中。
var canvas = new fabric.Canvas('canvas');
var polygonCount = 1;
var startDrawingPolygon;
var ArrayLength;
var addTexture = false;
var circleCount = 1;
var fillColor = "rgba(46, 240, 56, 0.5)";
function done() {
startDrawingPolygon = false;
ArrayLength = circleCount;
circleCount = 1;
var tempCount = 0;
window["polygon" + polygonCount] = new fabric.Polygon([{
x: 0,
y: 0
}, {
x: 0.5,
y: 0.5
}], {
fill: fillColor,
PolygonNumber: polygonCount,
name: "Polygon",
type: 'normal',
noofcircles: ArrayLength
});
canvas.add(window["polygon" + polygonCount]); …Run Code Online (Sandbox Code Playgroud)我试过这个RegEX没有解决方案
^([a-zA-Z]{1})([0-9]{3})$
测试用例:有效
123D
F311
12D3
99A9
我试图在这里做两个函数,一个是我使用加法,另一个是我使用乘法.如果我输入5和6,则计算按钮将生成11和30.我应该将乘法函数放在这个中,还是单独的?如果是这样,我如何将它连接到那个按钮?
function calculate() {
tal1 = document.getElementById("tal1").value;
tal2 = document.getElementById("tal2").value;
var answer;
answer = tal1 * 1 + tal2 * 1;
document.getElementById("answer").value = answer;
}Run Code Online (Sandbox Code Playgroud)
<form id="f1" name="f1">
<input id="tal1" type="text"><br><br>
<input id="tal2" type="text"><br><br>
<input onclick="calculate()" type="button" value="Calculate!"><br><br>
<input id="answer" type="text"><br><br>
<input id="answer" type="text">
</form>Run Code Online (Sandbox Code Playgroud)
我想创建一个函数,它将一个数组作为参数,从中创建一个随机数1 - 10,并运行直到它创建一个不在数组中的数字,并返回它.
这是jsfiddle
function contains() {
var check = false;
while (!check) {
var random = Math.floor(Math.random() * 10);
random += 1;
for (var i = 0; i < arr.length; i++) {
if (arr[i] === random) {
console.log(random);
check = false;
return false;
}
}
check = true;
console.log(random);
return true;
}
}
var arr = [1, 2, 3, 4, 5, 6];
$(".test").on("click", function() {
contains(arr);
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="test">
Test
</button>Run Code Online (Sandbox Code Playgroud)
我想在缩放对象时获得真实的对象宽度和高度。我试过
canvas.on('object:scaling', function(e){
console.log(e.target.width*e.target.scaleX);
});
Run Code Online (Sandbox Code Playgroud)
但似乎不能正常工作。
我正在尝试创建山形图(折线图和下面的区域被阴影化),但是,无论我如何尝试,阴影区域都不能覆盖整个区域。因为我的图表是一条开放路径,所以填写的结果是通过图表线的区域。
下面是我放在W3School上以演示该问题的示例代码。
我还在同一行上看到了其他一些问题,但是也遵循这些问题也会导致同样的问题。
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.beginPath();
ctx.moveTo(0,150);
ctx.lineTo(100,70);
ctx.lineTo(150,100);
ctx.lineTo(200,140);
ctx.lineTo(250,90);
ctx.lineTo(300,110);
ctx.fillStyle ="red";
ctx.fill();
ctx.stroke();Run Code Online (Sandbox Code Playgroud)
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>Run Code Online (Sandbox Code Playgroud)
我的功能和循环有问题,不知道为什么.
var a = ['1,0,1', '0,1,0', '1,1,1'];
var b = [1, 1, 1];
function myFunction() {
for (i = 0; i < a.length; i++) {
var user = a[i].split(',');
var cs = cosinesim(user, b);
document.getElementById("cs").innerHTML += String(user) + ' ' + String(cs) + '<br>';
cs = 0;
user = '';
}
}
function cosinesim(A, B) {
var dotproduct = 0;
var mA = 0;
var mB = 0;
for (i = 0; i < A.length; i++) {
dotproduct += (parseInt(A[i]) …Run Code Online (Sandbox Code Playgroud)