简体   繁体   English

如何将文本框弹出窗口(Jquery 工具提示或类似的)添加到画布中的 Fabric JS 图像?

[英]How to add a text box popup (Jquery tooltip or similar) to a Fabric JS image within a canvas?

I'm working on a Fabric JS project to map a floor with its rooms' locations.我正在从事一个 Fabric JS 项目,以绘制带有房间位置的楼层。
At each room location I added an icon.在每个房间位置我都添加了一个图标。 I want to have a text box pop up (such as jquery tooltip) each time the mouse hover above the icon.我希望每次鼠标悬停在图标上方时都会弹出一个文本框(例如 jquery 工具提示)。
The text box should show room information (phone number \\ person \\ size \\ etc.) I found this google group post , but no one really described the solution beside sharing this link文本框应该显示房间信息(电话号码\\人员\\大小\\等)我找到了这个google group post ,但除了分享这个链接之外没有人真正描述解决方案

Step 1: Set up your watchers第 1 步:设置您的观察者

Step 2: Load the dialog第 2 步:加载对话框

Step 3: Figure out where the bounding rect is on the page and move the dialog.第 3 步:找出边界矩形在页面上的位置并移动对话框。

canvas.observe('mouse:over', function (e) {
    console.log("Everyday I'm hovering");
    showImageTools(e.target);
});
canvas.observe('mouse:out', function (e) {
    $('#imageDialog').remove();
});
function showImageTools (e) {
    var url = 'dialog/imageDialog.htm';
    $.get(url, function(data) {
    // Don't add it twice
    if (!$('#imageDialog').length) {
        $(body).append(data);
    }
    moveImageTools();
});

function moveImageTools () {
    var w = $('#imageDialog').width();
    var h = $('#imageDialog').height();
    var e = canvas.getActiveObject();
    var coords = getObjPosition(e);
    // -1 because we want to be inside the selection body
    var top = coords.bottom - h - 1;
    var left = coords.right - w - 1;
    $('#imageDialog').show();
    $('#imageDialog').css({top: top, left: left});
}
function getObjPosition (e) {
    // Get dimensions of object
    var rect = e.getBoundingRect();
    // We have the bounding box for rect... Now to get the canvas position
    var offset = canvas.calcOffset();
    // Do the math - offset is from $(body)
    var bottom = offset._offset.top + rect.top + rect.height;
    var right = offset._offset.left + rect.left + rect.width;
    var left = offset._offset.left + rect.left;
    var top = offset._offset.top + rect.top;
    return {left: left, top: top, right: right, bottom: bottom};
}

That should be enough to get you started.这应该足以让你开始。 Let me know if any of this doesn't make sense.如果其中任何一个没有意义,请告诉我。

Add span element below the canvas在画布下方添加 span 元素

<span ref="toolTip" class="toolTip">ToolTip</span>

Add style for span element NB: Visibility is hidden by default为 span 元素添加样式 注意:默认情况下隐藏可见性

.toolTip{
  position: absolute;
  z-index: 1;
  background: rgb(119, 128, 0);
  height: 30px;
  width: 120px;
  padding: 8px;
  font-size: 13px;
  color: #fff;
  visibility: hidden;
}

Add mouse over and mouse out events添加鼠标悬停鼠标移出事件

 this.$data.canvas.on('mouse:over', function (e) {
        // console.log(e.e.offsetX)
        if (e.target && e.target.feature === 'Seat') {
          self.$refs.toolTip.innerHTML =
            'Seat: ' + e.target.label + '  Row: ' + e.target.rowLabel
          self.$refs.toolTip.style.visibility = 'visible'
          self.$refs.toolTip.style.top = e.e.offsetY + 'px'
          self.$refs.toolTip.style.left = e.e.offsetX + 'px'
        }
      })
      this.$data.canvas.on('mouse:out', function (e) {
        self.$refs.toolTip.style.visibility = 'hidden'
      })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM