当前位置: > > > tippy.js - 好用的tooltip提示插件使用详解3(API方法、回调函数)

tippy.js - 好用的tooltip提示插件使用详解3(API方法、回调函数)

九、显示、隐藏回调

1,生命周期函数介绍

tippy 为我们提供了如下几个生命周期回调函数,方便我们在不同阶段中执行相应的业务逻辑:
  • onShow:开始显示时调用。如果此时返回 false,则会阻止显示。
  • onShown:显示完毕时调用。
  • onHide:开始隐藏时调用。如果此时返回 false,则会阻止隐藏。
  • onHidden:隐藏完毕时回调。

2,使用样例

(1)效果图
  • 页面上添加了两个复选框,勾选后可以分别阻止提示标签的显示或隐藏。
  • 同时在每个回调函数中都打印出相关信息,方便观察。

(2)样例代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet"href="tippy.css">
    <script src='tippy.all.js'></script>
  </head>
  <body style="padding:170px">
    <button id="btn1">tooltip</button>
    <input id="checkbox1" type="checkbox"/><label for="checkbox1">阻止显示</label>
    <input id="checkbox2" type="checkbox"/><label for="checkbox2">阻止隐藏</label>
  </body>
  <script type="text/javascript">

    window.onload=function(){
      tippy('#btn1', {
        content: "欢迎访问hangge.com!",
        onShow(tip) {
          console.log("开始显示");
          //判断是非需要阻止显示
          if(document.getElementById("checkbox1").checked) {
            console.log("显示被阻止");
            return false;
          }
        },
        onShown(tip) {
          console.log("显示结束");
        },
        onHide(tip) {
          console.log("开始隐藏");
          //判断是非需要阻止隐藏
          if(document.getElementById("checkbox2").checked) {
            console.log("隐藏被阻止");
            return false;
          }
        },
        onHidden(tip) {
          console.log("隐藏结束");
        }
      })
    }
  </script>
</html>

十、获取 tip 集合、对象

Tippy 为我们提供了许多 API 方法来对提示标签进行操作和控制,而在使用这些方法前,我们必须先获取到提示标签对象。

1,获取集合

(1)当我们使用 tippy() 方法初始化时,返回的其实是 tipCollection。它是一个普通的对象,它内部属性如下:
{
  // Targets that should receive a tippy
  targets: '.btn',

  // Default props + options merged together
  props: { ... },

  // Array of all instances that were created
  instances: [tip, tip, tip, ...],

  // Method to destroy all the tooltips that were created
  destroyAll() { ... }
}

(2)特别注意的是 instances 属性中包含有所有创建的 tippy 实例对象。

2,获取实例对象

(1)我们可以遍历集合对象中的 instances 属性数据,来获取所有的实例对象。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet"href="tippy.css">
    <script src='tippy.all.js'></script>
  </head>
  <body style="padding:170px">
    <button id="btn1">tooltip</button>
  </body>
  <script type="text/javascript">
    window.onload=function(){
      var tipCollection = tippy('#btn1', {
        content: "欢迎访问hangge.com!",
      })

      //遍历所有tooltip实例并自动显示
      for (const tip of tipCollection.instances) {
        tip.show();
      }
    }
  </script>
</html>

(2)如果仅创建一个实例的话,可以适用 tippy.one() 方法来初始化。它将直接返回这个实例对象。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet"href="tippy.css">
    <script src='tippy.all.js'></script>
  </head>
  <body style="padding:170px">
    <button id="btn1">tooltip</button>
  </body>
  <script type="text/javascript">
    window.onload=function(){
      var tip = tippy.one('#btn1', {
        content: "欢迎访问hangge.com!",
      })
      //自动显示这个tooltip
      tip.show();
    }
  </script>
</html>

(3)由于 Tippy 实例初始化后,会自动通过 _tippy 属性存储在引用元素上。所有我们也可以通过页面元素来获取对应的实例对象。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet"href="tippy.css">
    <script src='tippy.all.js'></script>
  </head>
  <body style="padding:170px">
    <button id="btn1" data-tippy="欢迎访问hangge.com!">tooltip</button>
  </body>
  <script type="text/javascript">
    window.onload=function(){
      var btn = document.getElementById("btn1");
      var tip = btn._tippy; 
      //自动显示这个tooltip
      tip.show();
    }
  </script>
</html>

十一、常用的 API 方法

1,显示、隐藏指定 tooltip

//显示tooltip
tip.show();

//隐藏tooltip
tip.hide();

2,启用、禁用指定 tooltip

//禁用tooltip
tip.disable()

//启用tooltip
tip.enable()

3,销毁指定 tooltip

注意:销毁后,对应页面元素的 _tippy 属性也会自动被删除。
tip.destroy()

4,更新指定 tooltip

//只更新标签内容
tip.setContent('新的内容')

//同时更新多个属性
tip.set({
  content: '新的内容',
  arrow: true,
  duration: 1000,
  animation: 'perspective'
})

5,静态方法

下面这些静态方式是全局的,也就是说会对页面所有的 tooltip 生效。 
//想要全局捕获单击事件,而不是冒泡,则需先调用该方法
tippy.useCapture()

//隐藏页面上所有的tooltip
tippy.hideAllPoppers()

//禁用动画
tippy.disableAnimations()

//为之后所有新的tippy实例设置默认值
tippy.setDefaults({
  arrow: true,
  duration: 1000,
  animation: 'perspective'
})
评论0