javascript - 当布料对象在 Canvas 中移动时滚动 div

标签 javascript jquery html canvas fabricjs

我在 div 中有一个 Canvas 。 canvas的高度和宽度大于div。 div 有一个滚动条。现在,当 Canvas 内的结构对象(例如矩形)移动到 div 高度或 div 宽度之外时,滚动不会发生。谁能告诉我如何做到这一点?

JavaScript:

$( document ).ready(function() {
    var canvas = new fabric.Canvas('drawSurface2');

    var labeledRect = new fabric.Rect({
        strokeWidth: 1,
        stroke: 'blue',
        width: 200,
        height: 100,
        fill: 'transparent',
        transparentCorners: false,
        rx:10,
        ry:10,
        left: 100,
        top: 100,
        label: 'region',
        strokeDashArray: [3]
    });

    canvas.add(labeledRect);
});

HTML:

<div id="leftDiv2" class="leftDivClass" style="margin-top: 25px;display: inline-block;width: 800px;">
<canvas id="drawSurface2" width="1800" height="1800" class='drawSurface2Class'></canvas>

CSS:

.drawSurface2Class {
    border: 5px solid #33ff33;
}

.leftDivClass {
    float: left;
    margin-left: 30px;
    border: 1px solid #000000;
    width: 660px;
    height: 450px;
    background-size: 10px 10px;
    background-image: linear-gradient(to right, #e6e6e6 1px, transparent 1px), linear-gradient(to bottom, #e6e6e6 1px, transparent 1px);
    overflow:scroll;
}

最佳答案

尝试添加以下事件处理程序。然后,您应该能够拖动矩形并看到容器自动滚动

canvas.on('object:moving', function (options) {
    var currentScrollLeft = $('#leftDiv2')[0].scrollLeft;
    var currentScrollTop = $('#leftDiv2')[0].scrollTop;
    if (currentScrollLeft > options.target.left) {
        $('#leftDiv2')[0].scrollLeft = options.target.left;
    }
    if (currentScrollTop > options.target.top) {
        $('#leftDiv2')[0].scrollTop = options.target.top;
    }
    var minScrollLeft = (options.target.left + options.target.width) - 660;
    if (currentScrollLeft < minScrollLeft) {
        $('#leftDiv2')[0].scrollLeft = minScrollLeft;
    }
    var minScrollTop = (options.target.top + options.target.height) - 450;
    if (currentScrollTop < minScrollTop) {
        $('#leftDiv2')[0].scrollTop = minScrollTop;
    }
});

关于javascript - 当布料对象在 Canvas 中移动时滚动 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40023062/

相关文章:

javascript - 在 JS 中定位 SCSS 变量

javascript - 如何将文件夹中的所有图像放入 CSS 框

html - Bootstrap 的 CSS misc 对齐和格式问题

javascript - 使用 CSS 或 JavaScript 计算分页数

javascript - Three.js 带摄像头选择对象,无鼠标

javascript - 表达性能要求的模块

php - 当我将 div 悬停在另一个 div 中时,javascript 触发 "onmouseover"和 "onmouseout"

php - 在 JavaScript 中处理 AJAX 调用的 PHP 返回的数据

javascript - 全屏图像,图像放置在 html 中

javascript - 根据下拉选择显示一个 div