npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hm-waterfall

v1.0.2

Published

waterfall瀑布流,支持响应式,虚拟列表,支持ts/js/vue/vue3/react

Downloads

7

Readme

文档

效果

Image text

支持响应式虚拟列表

Image text

在 JS / TS 中使用

<div class="list"></div>
1.通过 cdn 引入
<script src="https://unpkg.com/[email protected]"></script>;
//or
<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>;

<script>
  const getData = (page, pageSize) => {
    return new Promise((resolve) => {
      fetch(`http://localhost:5000/getwaterfall?page=${page}&pageSize=${pageSize}`)
        .then((response) => response.json())
        .then((data) => resolve(data.data));
    });
  };
  const hw = new hmWaterfall(".list", {
    gap: 16,
    columnNum: 5,
    request: getData,
  });
</script>
2.通过 import 引入
npm install hm-waterfall
const hw = new hmWaterfall(".list", {
  gap: 16,
  columnNum: 5,
  request: getData,
});
实例有一个设置列数的方法 setColumnNum(columnNum)

完成不同设备宽度下列数的变化

 const getColumnNum = (width: number) => {
  if (width > 960) {
    return 5;
  } else if (width >= 690 && width < 960) {
    return 4;
  } else if (width >= 500 && width < 690) {
    return 3;
  } else {
    return 2;
  }
};
const resizeObserver = new ResizeObserver((entries) => {
  const columnNum = getColumnNum(entries[0].target.clientWidth);
  hw.setColumnNum(columnNum);
});
resizeObserver.observe(document.querySelector(".list")!);
自定义卡片底部信息

footer 函数接收一个当前卡片数据 item 函数,返回自定义 dom

Image text

const hw = new hmWaterfall(".list", {
  gap: 16,
  columnNum: 5,
  request: getData,
  footer: (item) => {
    const div = document.createElement("div");
    div.classList.add("text-info");
    div.innerHTML = ` 
        <div class="text">${item.title}</div>
        <div class="info">
          <img src="${item.avatar}" style="width:20px; height:20px; border-radius:50%" />
          <span>${item.author}</span>
        </div>
      `;
    return div;
  },
});
点击卡片事件

onCardClick 函数接收一个当前卡片数据 item

const hw = new hmWaterfall(".list", {
  gap: 16,
  columnNum: 5,
  request: getData,
  onCardClick: (item) => {
    alert(`你点击了----${item.title}`);
  },
});
自定义回到顶部和加载数据 dom

backTopSlot 函数返回自定义 dom loadingSlot 函数返回自定义 dom

const hw = new hmWaterfall(".list", {
  gap: 16,
  columnNum: 5,
  request: getData,
  backTopSlot: () => {
    const div = document.createElement("div");
    div.className = "back-top-btn";
    div.innerHTML = "↑";
    return div;
  },
  loadingSlot: () => {
    const div = document.createElement("div");
    div.innerHTML = "加载中...";
    return div;
  },
});

API

new hmWaterfall(selector, options);
selector
<div class="list"></div>
//传入 .list 或者 document.querySelector(".list")
options