• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何使用点导航构建UIkit灯箱

在本教程中,您将学习如何从UIkit(一个前端框架)扩展超级有用的灯箱组件,通过添加一个点导航,这要归功于它的dotnav 组件。 

咱们的 UIkit 灯箱扩展

事不宜迟,这就是咱们将要创建的内容(单击图像以显示灯箱):

See the Pen  How to Build a UIkit Lightbox With Dot Navigation by Envato Tuts+ (@tutsplus)  on CodePen.

1.包括所需的资产

与任何第三方框架或库一样,要使用它,咱们首先必须安装它所需的文件。

UIkit 至少需要两个文件:一个 css 和一个 javascript 文件。如果您想使用UIkit 图标,可以选择包含另一个 JavaScript 文件。

考虑到这一点,如果您查看咱们演示笔的设置选项卡,您会看到有一个外部 CSS 文件和一个外部 javaScript 文件。


如何使用点导航构建UIkit灯箱  第1张

如何使用点导航构建UIkit灯箱  第2张


2.创建图像网格

首先,咱们将利用UIkit 的网格系统来构建一个简单的图像网格。 


如何使用点导航构建UIkit灯箱  第3张

让咱们做一些笔记:

  • 该article元素将充当灯箱容器。它里面的所有链接都是灯箱链接。他们每个人都有一个data-caption和一个data-alt属性。alt他们的工作是为相关的灯箱图像添加标题和属性。

  • 稍后咱们将通过 JavaScript 初始化灯箱。 

  • 对于图像,咱们将使用从最近的教程中拍摄的一些Unsplash照片。

  • 由于图像组件,咱们将延迟加载图像。

这是所需的标记:


<article class="post">

  <div class="uk-container">

    <div class="uk-child-width-1-2@s" uk-grid>

      <div>

        <figure>

          <a href="ireland1.jpg" data-caption="Ring of Kerry, County Kerry, Ireland" data-alt="Ring of Kerry, County Kerry, Ireland">

            <img width="1920" height="1280" data-src="ireland1.jpg" alt="Ring of Kerry, County Kerry, Ireland" uk-img>

          </a>

        </figure>

      </div>

      <div>

        <figure>

          <a href="ireland2.jpg" data-caption="Fintown, Ireland" data-alt="Fintown, Ireland">

            <img width="1920" height="1280" data-src="ireland2.jpg" alt="Fintown, Ireland" uk-img>

          </a>

        </figure>

      </div>

      <div>

        <figure>

          <a href="ireland3.jpg" data-caption="Anne Street, Dublin, Ireland" data-alt="Anne Street, Dublin, Ireland">

            <img width="1920" height="1280" data-src="ireland3.jpg" alt="Anne Street, Dublin, Ireland" uk-img>

          </a>

        </figure>

      </div>

      <div>

        <figure>

          <a href="ireland4.jpg" data-caption="Doonagore Castle, Doolin, Ireland" data-alt="Doonagore Castle, Doolin, Ireland">

            <img width="1920" height="1280" data-src="ireland4.jpg" alt="Doonagore Castle, Doolin, Ireland" uk-img>

          </a>

        </figure>

      </div>

    </div>

  </div>

</article>

3.创建 UIkit 灯箱

虽然可以选择通过将uk-lightbox属性添加到.post元素来激活 UIkit 灯箱,但让咱们通过 JavaScript 来完成,因为咱们想稍后调用它的show()方法:

1

const postLightbox = UIkit.lightbox(".post");

正如您在下面的演示中所见,只需一行代码,咱们就成功地创建了一个功能齐全的 UIkit 灯箱。

See the Pen  How to Build a UIkit Lightbox by Envato Tuts+ (@tutsplus)  on CodePen.

关于 UIkit 事件

在这一点上,咱们已经准备好更进一步,按照咱们的意愿扩展灯箱。为了完成这个任务,咱们将使用灯箱的可用自定义事件。让咱们在这里稍作停留并解释一些事情。

UIkit 使用一种特殊的语法来捕获事件,如此处所述,如下所示:


UIkit.util.on("#offcanvas", "show", function () {...});

在咱们的例子中,灯箱不是初始 dom 的一部分,所以这样的事情不会起作用:


UIkit.util.on(".uk-lightbox", "beforeshow", function () {...});

相反,咱们应该这样做:


UIkit.util.on(document, "beforeshow", function (e) {...});

 

// or more specifically this

UIkit.util.on(document, "beforeshow", ".uk-lightbox", function (e) {...});

请注意,咱们利用了事件委托并将事件附加到document元素。然后,通过target 特定事件的属性,咱们将检查发生事件的元素。 

咱们现在将看到他们的行动!

创建点导航

作为第一步,咱们必须创建点导航并将其附加到灯箱。为此,咱们将监听灯箱的beforeshow事件并执行以下操作:

  1. 根据灯箱项目的数量构建点导航标记。同样,此标记将来自 dotnav 组件。

  2. 将点导航附加到灯箱,并通过uk-position-top-center实用程序类将其放置在顶部中心位置。

  3. 将uk-light实用程序类添加到灯箱中,为点指示器提供浅色(白色)。

这是所需的代码:


UIkit.util.on(document, "beforeshow", function (e) {

  // 1

  const target = e.target;

  const lightboxItems = target.queryselectorAll(".uk-lightbox-items li").length;

  let markup = '<ul class="uk-dotnav">';

  for (let i = 0; i < lightboxItems; i++) {

    markup += '<li><a href=""></a></li>';

  }

  markup += "</ul>";

  // 2

  const dotNav = document.createElement("div");

  dotNav.setAttribute("class", "uk-position-top-center");

  dotNav.innerhtml = markup;

  target.appendChild(dotNav);

  // 3

  target.classList.add("uk-light");

});

设置活动点项目

作为第二步,咱们必须声明活动的点导航项。为此,咱们将监听灯箱的itemshown事件并执行以下操作:

  1. uk-active从(预先存在的)活动点项目中删除类,如果有的话。

  2. 查找当前活动灯箱项目(图像)的索引。

  3. 将uk-active类分配给其索引与此灯箱项目的索引匹配的点项目。 

这是所需的代码:


const ukActiveClass = "uk-active";

 

UIkit.util.on(document, "itemshown", function (e) {

  const target = e.target;

  const dotNav = document.querySelector(".uk-dotnav");

  // 1

  const dotNavActiveItem = dotNav.querySelector("li.uk-active");

  if (dotNavActiveItem) {

    dotNavActiveItem.classList.remove(ukActiveClass);

  }

  // 2

  let index = [...target.parentElement.children].indexOf(target);

  // 3

  dotNav.querySelector(`li:nth-child(${++index})`).classList.add(ukActiveClass);

});


点击点链接

最后,点链接应在单击时显示相应的灯箱项目。为此,每次单击此类链接时,咱们将执行以下操作:

  1. 阻止其默认操作。

  2. 找到它的索引。

  3. 使用 availableshow()方法显示关联的灯箱项目。

这是所需的代码:


document.addeventListener("click", function (e) {

  const target = e.target;

  if (target.tagName.toLowerCase() === "a" && target.closest(".uk-dotnav")) {

    // 1

    e.preventDefault();

    // 2

    const parentListItem = target.parentElement;

    const index = [...parentListItem.parentElement.children].indexOf(

      parentListItem

    );

    // 3

    postLightbox.show(index);

  }

});

结论

就是这样,伙计们!今天咱们通过利用另一个现有的组件来扩展 UIkit 组件的功能。希望,如果您是 UIkit 爱好者,您可能会在此扩展中找到一些有用的东西。对于过去没有使用过 UIkit 的人,我希望这个小练习可以帮助您了解它的一小部分强大功能。

我真正喜欢这个框架的地方在于,它可以很容易地将常见的 UI 元素嵌入到您的网站/应用程序中,而无需为轮播、滚动动画、灯箱等安装单独的插件。更多 UIkit 教程将在不久后发布——敬请期待!


文章目录
  • 咱们的 UIkit 灯箱扩展
  • 1.包括所需的资产
  • 2.创建图像网格
  • 3.创建 UIkit 灯箱
    • 关于 UIkit 事件
    • 创建点导航
    • 设置活动点项目
    • 点击点链接
  • 结论