浮层 / Popup

优质
小牛编辑
134浏览
2023-12-01

Popup 是一个工具控件,用来完成浮出层的功能,经常作为其他控件的子控件组合使用,一般不直接使用。

Popup 的主要参数是 triggers,用以指定触发 Popup 浮层。triggers 是一个 jQuery 可以接受的css selector

使用 target 属性来指定 Popup 的显示位置。

<input type="text" id="input-target">
require(['jquery', 'moye/Popup'], function ($, Popup) {

  var input = document.getElementById('input-target');
  new Popup({
    target: input,
    triggers: input,
    content: 'this is popup content'
  })
  .render();
  
});

如果不指定 target 属性,那么 Popup 会挂靠到当前的触发元素上

<ul>
    <li class="popup-target">
      <span>aaaaaaaaaa</span>
    </li>
    <li class="popup-target">
      <span>bbbbbbbbbb</span>
    </li>
    <li class="popup-target">
      <span>cccccccccc</span>
    </li>
    <li class="popup-target">
      <span>dddddddddd</span>
    </li>
    <li class="popup-target">
      <span>eeeeeeeeee</span>
    </li>
    <li class="popup-target">
      <span>ffffffffff</span>
    </li>
    <li class="popup-target">
      <span>jjjjjjjjjj</span>
    </li>
  </ul>
require(['jquery', 'moye/Popup'], function ($, Popup) {

  new Popup({
    triggers: '.popup-target',
    content: 'this is popup content',
    dir: 'rc',
    mode: 'over'
  })
  .render();
  
});

可以通过指定 dir 参数来调整 Popup 挂靠的方向,上例中 dir 设定为 rc,表示 Popup 挂靠到目标元素的右侧中间位置。

<button id="add">添加一项</button>
<ul id="live-trigger-container">
  <li class="popup-target">
    <span>aaaaaaaaaa</span>
  </li>
  <li class="popup-target">
    <span>bbbbbbbbbb</span>
  </li>
  <li class="popup-target">
    <span>cccccccccc</span>
  </li>
  <li class="popup-target">
    <span>dddddddddd</span>
  </li>
  <li class="popup-target">
    <span>eeeeeeeeee</span>
  </li>
  <li class="popup-target">
    <span>ffffffffff</span>
  </li>
  <li class="popup-target">
    <span>jjjjjjjjjj</span>
  </li>
</ul>
require(['jquery', 'moye/Popup'], function ($, Popup) {

  new Popup({
    triggers: '.popup-target',
    liveTriggers: '#live-trigger-container',
    content: 'this is popup content',
    dir: 'rc',
    mode: 'over'
  })
  .render();

  $('#add').on('click', function () {
    $('<li>').addClass('popup-target').html(Math.random()).appendTo('#live-trigger-container');
  });
  
});

可以指定 liveTriggers 来限定一个容器, 在限容器内的所有 triggers 都可以触发 Popup,即使它们是在初始化之后被创建的。