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

baymax-shopify-countdown

v1.0.1

Published

shopify 倒计时

Downloads

6

Readme

倒计时API与使用案例

倒计时API

构造函数 CountDown

注意:

​ 1、下面的 Collection 的值 都是指 Collection 的 handle

公共属性 (静态属性)

| 属性 | 说明/返回 | 返回类型 | | ----------------- | ----------------------------------------------------------- | -------- | | publicData | 倒计时组(所有倒计时数据都在这里面可以找到) | JSON | | publicCollections | 倒计时组的藏品(集合/collection)组,(含有倒计时的藏品集) | Array |

公共方法(静态方法)

| 方法 | 类型 | 参数类型 | 说明/返回 | 返回类型 | | ------------- | ------------------------------------------------------------ | -------------- | ------------------------------------------------------------ | -------- | | getCollection | function(collections)collections 藏品【必需】(集合/collection)组 | Array | 返回参数中含有倒计时的藏品 | Array | | getDHMS | function(t,type)t 毫秒数【必需】type 类型【可选】Number、String 默认值:String | Number,String | 将毫秒数转换为天时分秒,格式 {d,h,m,s}。类型有两个值 Number 和 String,默认值是 StringNumber:则天时分秒的值是 数值类型String:则天时分秒的值是 字符串类型,且 <10 的值会在前面加 0,如 5,则返回的是 05 | JSON |

实例化

// CountDown 实例化
const CD = new CountDown(collection, {
	on: {
        init: function(data) {
            console.log("初始化完成", data);
        },
        watchStartRemTiem: function (t, data) {
            console.log("监听距离倒计时启动剩余时间",t,data)
        },
        watchEndRemTiem: function(t, data) {
            console.log("监听距离倒计时结束剩余时间",t,data)
        }
   }
})

——————————————————————————————————————————————————————————————————————————
参数: collection 是倒计时的 藏品(集合/collection)的话柄

实例参数

| 参数 | 类型 | 说明 | | ---------- | -------------- | --------------------------------------------------- | | collection | String【必需】 | collection 是倒计时的 藏品(集合/collection)的话柄 | | options | Object【可选】 | 选项,这里是配置倒计时实例的属性,目前只有on事件 |

实例事件

| 事件 | 类型 | 说明 | | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | | init | function(data)data:倒计时实例的数据【JSON】 | 实例初始化完成后的回调 | | watchStartRemTiem | funtion(t,data)t 距离倒计时启动剩余毫秒数【数值类型】data 倒计时实例的数据【JSON】 | 监听距离倒计时启动剩余毫秒数。即,当距离倒计时启动剩余毫秒数发生变化变化时的回调 | | watchEndRemTiem | funtion(t,data)t 距离倒计时结束剩余毫秒数【数值类型】data 倒计时实例的数据【JSON】 | 监听距离倒计时结束剩余毫秒数。即,当距离倒计时结束剩余毫秒数发生变化变化时的回调 |

实例方法

| 方法 | 类型 | 说明 | | ---------- | ---------- | ---------- | | clearTimer | function() | 清除定时器 | | destroy | function() | 注销实例 |

使用案例

安装

1、将 ib-countdowns.liquid 倒计时section文件 上传到 section 目录下

2、在 theme.liquid 的 body 正下方插入

{% section 'ib-countdowns' %}

提示: ib-countdowns 不一定要在 theme.liquid 中引入,假如你只有产品页面使用该倒计时,你也可以在只产品页面中引入。我们所需要确保的是,该文件放在我们实例化倒计时前面

逻辑(这里叫:倒计时三部曲 吧)

如何使用该组件,我这里给大家梳理下主要逻辑,其实也很简单,主要有三步

第一步:获取 倒计时的 collection

第二步:实例化 倒计时

第三部:渲染 倒计时的DOM

一、在特定的产品使用(一个或多个)倒计时

大家都是程序猿,我就不说太细,这里我就直接放代码,并对逻辑和要点做下描述

我们将下方代码作为一个片段,并插入到我们 产品页面所要显示的位置,就可以看到效果,当然,你的倒计时数据也要设置正确,不如也不会显示

<!--
 * @Author: 郑勇锋
 * @Description: 
 * @Date: 2020-07-29 17:31:30
 * @LastEditors: 郑勇锋
 * @LastEditTime: 2020-07-29 17:33:53
 * @FilePath: \ibtheme\snippets\ib-product-countdown.liquid
-->
<style>
    .ib-countdown {
        display: none;
    }
    .ib-countdown[data-startime="0"] {
        display: block;
    }
    .ib-countdown .ib-countdown-timer {
        text-align: center;
        margin: 20px auto;
        background: rgb(255, 65, 81);
        border-radius: 30px;
        max-width: 400px;
        font-family: 'Open Sans', sans-serif;
        overflow: hidden;
        display: inline-block;
        padding: 0 30px;
    }
    .ib-countdown .ib-countdown-timer > span {
        display: block;
        float: left;
        font-size: 26px;
        color: #FFFFFF;
        height: 60px;
        padding: 10px 20px 0;
        line-height: 25px;
        border-style: inset;
        border-color: rgba(255, 255, 255, 0.45);
        border: 0;
        border-right: 1px solid #FF7E89;
        position: relative;
    }
    .ib-countdown .ib-countdown-timer > span:last-child {
        border-right: 0;
    }
    .ib-countdown .ib-countdown-timer > span::after {
        content: "";
        position: absolute;
        bottom: 0;
        height: 25px;
        line-height: 16px;
        padding-bottom: 9px;
        font-size: 12px;
        text-align: center;
        width: 100%;
        left: 0;
    }
    .ib-countdown .ib-countdown-timer > span.days::after {
        content: "days";
    }
    .ib-countdown .ib-countdown-timer > span.hours::after {
        content: "hours";
    }
    .ib-countdown .ib-countdown-timer > span.minutes::after {
        content: "minutes";
    }
    .ib-countdown .ib-countdown-timer > span.seconds::after {
        content: "seconds";
    }
</style>
<!-- 倒计时 -->
<div id="countdown-container"></div>

<script>
    {% if request.page_type == "product"%}
    $(document).ready(function () {
        
        // 获取产品的 collection 数组
        {% assign collections = product.collections%}
        const collections = []
        {% for collection in product.collections %}
            collections.push("{{ collection.handle }}")
        {% endfor %}
        
        // 获取含有倒计时 collection 数组
        const collectionCDs = CountDown.getCollection(collections);

        // 渲染 倒计时DOM 的方法
        const addCountdownDOM = (container, data) => {
            console.log(container);
            let endRemTiem = CountDown.getDHMS(data.endRemTiem);
            let startRemTiem = CountDown.getDHMS(data.startRemTiem);
            console.log(endRemTiem, startRemTiem);
            if (!container || !data) return;
            const html = /*html*/`
                <div class="ib-countdown" data-startime="${data.startRemTiem}" data-name="${data.data.name}" data-position="${data.data.position}">
                    <div class="ib-countdown-timer">
                        <span class="days">${endRemTiem.d}</span>
                        <span class="hours">${endRemTiem.h}</span>
                        <span class="minutes">${endRemTiem.m}</span>
                        <span class="seconds">${endRemTiem.s}</span>
                    </div>
                    <div class="ib-countdown-content">
                        ${data.data.content}
                    </div>
                </div>
            `
            $(container).append(html)
        }
        
        // 更新 倒计时DOM 中的时间
        const updateCountdownDOM = (t, data) => {
            const endRemTiem = CountDown.getDHMS(t);
            const timerDom = $(`.ib-countdown[data-position="${data.data.position}"] .ib-countdown-timer`);
            timerDom.find(".days").html(endRemTiem.d);
            timerDom.find(".hours").html(endRemTiem.h);
            timerDom.find(".minutes").html(endRemTiem.m);
            timerDom.find(".seconds").html(endRemTiem.s);
            if (t === 0) {
                return $(`.ib-countdown[data-position="${data.data.position}"]`).slideUp();
            }
        }
        // 实例化倒计时
        const CD = [];
        // 遍历 产品中的倒计时 并 实例化 他们
        collectionCDs.forEach((collection, index) => {
            CD[index] = new CountDown(collection, {
                on: {
                    init: function(data) {
                        console.log("初始化完成", data);
                        // 向 #countdown-container 中插入倒计时DOM
                        addCountdownDOM("#countdown-container", data)
                    },
                    watchStartRemTiem: function (t, data) {
                        // 更新 对应 倒计时DOM data-startime 中的值(距离倒计时启动的毫秒数)
                        // 这里我设置了个样式 .ib-countdown[data-startime="0"] { display: block; },什么意思就不用我说了吧,大家看看就懂了
                        $(`.ib-countdown[data-position="${data.data.position}"]`).attr({"data-startime": `${t}`})
                    },
                    watchEndRemTiem: function(t, data) {
                        // 更新 对应倒计时DOM 的时间
                        updateCountdownDOM(t, data)
                    }
                }
            });
            
        });
  
    });
    {% endif %}
</script>

———————————————————————————————————————————————————— 注意 ——————————————————————————————————————————————————————————————
这逻辑中有两个主要点,
一、如何拿到该产品的含有倒计时的 collection 数组
第一是先拿到 产品的系列集合,第二是 通过  getCollection 获取符合条件的 collection

二、如何找到对应的倒计时DOM
在 倒计时数据中 我个每个倒计时设置了一个 position 属性,表示倒计时在倒计时组中的位置,也是一个辨别倒计时的属性(类似于索引)。我们可以给每个 倒计时DOM 设置个 data-position 属性 以此来建立它们的关系

二、在特定的页面使用倒计时

这里我只讲逻辑,因为我现在还没有去 开发 该案例,等后面我有需要写该需求的需求时,我再给大家补充

我们就按照上面的 倒计时三部曲,进行说明

第一步:如何获取倒计时的 collection

​ 1、我们先在要添加倒计时的部分或者页面里面、添加一个自定内容(叫:倒计时:里面只需要一个藏品选择器,而这个藏品的值要和 我们倒计时的藏品值一致即可)

​ 2、通过 液体语言 去获取上一步设置的值即可,该值便是我们倒计时的 collection

第二步:实例化 该倒计时

第三步:渲染 DOM

第二步、第三步 和我们上面 《在特定的产品使用(一个或多个)倒计时》都差不多,只不过,我们这里只有一个倒计时