RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 860903
Accepted
Алексей
Алексей
Asked:2020-07-27 13:49:56 +0000 UTC2020-07-27 13:49:56 +0000 UTC 2020-07-27 13:49:56 +0000 UTC

延迟对象的工具提示

  • 772

附近有几个物体,指向它们中的每一个都会出现一个带有动画的提示(一个列表ul,它们li一个接一个地平滑出现)。由于有很多元素并且用户可以快速超越它们,我决定以debounce(f, 150ms). 但是现在,如果您将鼠标随机移动到对象上并且原则上不与任何东西交互,则会出现最后一个受影响对象的提示(这是合乎逻辑的),因为它的debounce工作时间比工作时间晚.stop().fadeOut(). 并且有时会出现一个bug,如果你拉手,例如从一个对象到另一个对象(我这里没有重新创建它,也许有人会弄清楚,如果没有,我会尝试举个例子),然后提示出现在光标下,但由于它与 object 重叠,这表明它立即消失并且鼠标再次位于对象上,提示出现并且一切都在循环中。

function debounce(f, ms) {
    let timer = null;
    return function (...args) {
        const onComplete = () => {
            f.apply(this, args);
            timer = null;
        }
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(onComplete, ms);
    };
}

function renderHint() {
    $('#hint').stop().append('123').fadeIn('100');
}

let renderHintDebounce = debounce(renderHint, 150);
$('.block').on('mouseenter', function(e) {
  $('#hint').empty();
  $(this).mousemove(function(pos) {
    $("#hint")
      .css('left', (pos.pageX + 50)+'px')
      .css('top', (pos.pageY - 30)+'px');
  });
  renderHintDebounce();
});
$('.block').on('mouseleave', function(e) {
  $('#hint').stop().fadeOut(100).queue(function() {
    $(this).empty().dequeue();
  })
});
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  width: 100vw;
}

.block {
  width: 100px;
  height: 100px;
  background: red;
}

#hint {
  position: absolute;
  display: none;
  background: #eee;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
  <div class="block"></div>
</div>
<div id="hint">123</div>

添加. 如果工具提示没有按位置添加,即 添加 50 和 30 像素,然后工具提示出现和消失的错误与我的错误相似。

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. diproart
    2020-07-27T14:45:10Z2020-07-27T14:45:10Z

    这样的界面“功能”,虽然乍一看很简单,但实际上实现起来相当困难。是的,显示/隐藏很容易,但在不同的浏览器和堆栈中实现稳定和“漂亮”的工作却非常困难。

    使用社区的经验,例如:

    • https://popper.js.org/
    • https://atomiks.github.io/tippyjs/

    在debounce这里做不到,您需要提供所有可能的行为,以及调整窗口大小时的选项。没有办法明确地回答这个问题。这仍然不是正确的答案。

    • 3
  2. Best Answer
    Diskyp
    2020-07-27T14:47:56Z2020-07-27T14:47:56Z

    $(function(){
    let hint=$('#hint'),
    hintTimer,
    fadeTime=400
    $('.block').on('mouseenter', function(e) {
      let el=$(this)
      el.mousemove(function(pos) {
        hint
          .css('left', (pos.pageX + 50)+'px')
          .css('top', (pos.pageY - 30)+'px');
      });
      hintTimer=setTimeout(()=>hint.html(el.attr('hint')).fadeIn(fadeTime),fadeTime)
    });
    $('.block').on('mouseleave', function(e) {
      if(hintTimer) clearTimeout(hintTimer)
      hint.off('mousemove').fadeOut(fadeTime)
    });
    })
    .container {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      width: 100vw;
    }
    
    .block {
      width: 100px;
      height: 100px;
      background: red;
      border:1px solid white;
    }
    
    #hint {
      position: absolute;
      display: none;
      background: #eee;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="container">
      <div class="block" hint="FIRST red thing"></div>
      <div class="block" hint="SECOND red thing"></div>
      <div class="block" hint="THIRD red thing"></div>
    </div>
    <div id="hint">123</div>

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5