html - 使 Materialise CSS 工具提示在悬停在其上方时保持不变

标签 html css materialize

我目前正在做的一个工作是调用当您将鼠标悬停在 SVG 元素的一部分上时显示的工具提示,在鼠标移开时正常消失,但前提是鼠标不会越过工具提示本身。我们使用的是 Materialise CSS,它带有工具提示组件。 我的代码片段如下。

<svg width="400" height="400">
    <rect x="190" y="255" width="70" height="25" class="fixture good tooltipped" id="ines" data-position="top" data-delay="50" data-tooltip="Carbonated Drinks<br><a href='#'>View More</a>"" data-html="true"/>
</svg>

如您所见,我想要这样做的原因是,如果用户将鼠标悬停在实际的工具提示上,则可以单击“查看更多”链接。但目前,即使您将鼠标悬停在工具提示上,工具提示也会消失。

我知道这可以通过其他框架/库来完成,但到目前为止我还无法在 Materialise CSS 中做到这一点。

有谁知道这是否可能,因为广泛的互联网搜索一无所获。

最佳答案

Materialize tooltip为每个涉及的 dom 节点分配一个“mouseleave.tooltip”事件处理程序。

一旦离开 dom 元素,就会触发此事件,225 毫秒后(详细信息请参阅 source code ),tootip 将被隐藏。

此外,工具提示的样式为 pointer-events等于 none:无法触发鼠标事件,因此您的 anchor 永远不可点击。

为了克服所有这些步骤,一种可能性是:

  • 保存 jQuery mouseout 事件对象
  • 从 jQuery 处理程序中删除先前的对象,这样就不会触发 mouseleave.tooltip。
  • 处理每个工具提示的 jQuery 悬停事件(具有类:material-tooltip):这可以保存属性,以便测试工具提示内或外的鼠标位置
  • 在元素的 mouseenter 上将指针事件设置为默认自动
  • 以同样的方式在 mouseleave 上设置小于 225 毫秒的超时,以测试鼠标是否位于工具提示上:如果没有,则执行标准 jQuery Materialize mouseleave.tooltip 事件
  • 在鼠标离开时,工具提示会执行与上一点相同的步骤。

代码片段(jsfiddle):

$(function () {

    var x = jQuery._data( document.getElementById('ines'), "events" )['mouseout'][0];
    delete jQuery._data( document.getElementById('ines'), "events" )['mouseout'];
    $('.material-tooltip').hover(function(e) {
        $(this).attr('hover', 1);
    }, function(e) {
        $(this).attr('hover', 0);
        x.handler.apply( document.getElementById('ines'), x);
    });
    $('#ines').on('mouseenter', function(e) {
        $('.material-tooltip:visible').css('pointer-events', 'auto');
    }).on('mouseleave', function(e) {
        setTimeout(function() {
            var val = $('.material-tooltip:visible').attr('hover');
            if (val == undefined || val == 0) {
                x.handler.apply( document.getElementById('ines'), x);
            }
        }, 150);
    })


});
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/css/materialize.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.98.0/js/materialize.min.js"></script>


<svg width="400" height="400">
    <rect x="190" y="155" width="70" height="25" class="fixture good tooltipped" id="ines" data-position="top"
          data-delay="50" data-tooltip="Carbonated Drinks<br><a href='#'>View More</a>"
          data-html="true"/>
</svg>

关于html - 使 Materialise CSS 工具提示在悬停在其上方时保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42881671/

相关文章:

html - 如何设置section height以适应屏幕?

javascript - jQuery:动画难题

jquery - 由自定义 jQuery 验证错误标签引起的不需要的空间

html - 如何对齐 li 元素底部的图像?

php - 如何使用 CSS 为联系表单中的外发电子邮件设置样式

php - 无法将 + 符号传递给 php 页面进行处理

javascript - 在物化设计中设置自动播放轮播的间隔

javascript - 当我使用 JQuery 创建文本框时,Materialise 日期选择器不起作用

html - 物化 CSS Sidenav 和内容

html - 悬停时如何使菜单项的整个宽度更改背景颜色?