JS-实现商品倒计时

这是一个关于如何使用JavaScript实现商品倒计时的代码示例。代码包括两种情况:一是计算距离拼单结束的时间,二是秒表功能。JS函数kjuiTimer用于倒计时,stopWatch用于秒表,numberInput则用于处理数量增减输入框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                         <div class="h6 timer">


                            @if (item.Type == 1)
                            {
                                TimeSpan span = item.OrderEndTime - DateTime.Now;


                                <span class="kjicon kjicon-clock h3 fcolor-main"></span>
                                <text>距离拼单结束:</text>
                                <span><b class="d h3">@(span.Days.ToString().PadLeft(2, '0'))</b>天</span>
                                <span><b class="h h3">@(span.Hours.ToString().PadLeft(2, '0'))</b>时</span>
                                <span><b class="m h3">@(span.Minutes.ToString().PadLeft(2, '0'))</b>分</span>
                                <span><b class="s h3">@(span.Seconds.ToString().PadLeft(2, '0'))</b>秒</span>


                            }
                            else if (item.Type == 2)
                            {
                                <span>集单尚未开始,敬请期待!</span>
                            }
                            else
                            {
                                <span>已结束</span>
                            }
                        </div>



下面是js
$.fn.extend({
    //计时器
    kjuiTimer: function (config) {
        /*
        config配置项
        max :               number           计时器最大值,默认值为5
        init:               number           计时器的初始值。默认为max,当该值不等于0时,计时器将自动开始计时
        before:             function         执行start函数之前执行,当返回值为false时,不执行start函数;默认值为true;
        start:              function         当计时器的值等于0且before返回值为true时,所执行的函数;
        step(counter):     function         计时器每工作时,每秒执行的函数, counter为计时器当前的值,该值不会为0,等于0的情况执行end函数;
        end:                function         计时器值跳到0时,执行的函数;
        */


        //计时器的文本默认会显示在选择元素下面的 counter类中
        //计时器不可用时,选择的元素会加上 disabled 类,可用时移除disabled类


        config = $.extend({
            max: 5,
            init: 5,
            before: true,
            start: false,
            step: false,
            end: false

        }, config);

        var max = config.max;
        var init = config.init;
        var before = config.before;
        var start = config.start;
        var step = config.step;
        var end = config.end;

        var counter = init !== 0 ? init : max;
        var state = init === 0 ? true : false;
        var timer;

        $(this).each(function (index, ele) {


            if (!state) {
                $(ele).addClass("disabled");
                counter--;
                timer = setInterval(work, 1000);
            }
            if (start) {
                $(ele).click(function () {
                    if (state && before()) {
                        state = false;
                        $(ele).addClass("disabled");
                        start();
                        counter--;
                        timer = setInterval(work, 1000);

                    }

                });
            }

            function work() {
                if (counter !== 0) {
                    $(ele).find(".counter").text(counter);
                    if (step) {

                        step(counter);
                    }
                    counter--;

                } else {
                    $(ele).find(".counter").text("");
                    if (end) {
                        end();
                    }
                    state = true;
                    $(ele).removeClass("disabled");
                    clearInterval(timer);
                    counter = max;

                }
            }


        });
    },


   


    

    //秒表
    stopWatch: function (end) {
        /*
        秒表

        html结构
        <div class="demo">
        <span ><span class="d"></span>天</span>
        <span ><span class="h"></span>时</span>
        <span ><span class="m"></span>分</span>
        <span ><span class="s"></span>秒</span>
        <div>
        
        */

        $(this).each(function (index, ele) {
            var $d = $(ele).find(".d");
            var $h = $(ele).find(".h");
            var $m = $(ele).find(".m");
            var $s = $(ele).find(".s");
            var d = parseInt($d.text());
            var h = parseInt($h.text());
            var m = parseInt($m.text());
            var s = parseInt($s.text());

            var timer = setInterval(second, 1000);

            function second() {
                s--;
                if (s === 0 && m === 0 && h === 0 && d === 0) {
                    clearInterval(timer);
                    end(ele);
                    return;
                }

                if (s < 0) {
                    s = 59;
                    minute();
                }
                $s.text(s < 10 ? "0" + s : s);
            }

            function minute() {
                m--;
                if (m < 0) {
                    m = 59;
                    hour();
                }
                $m.text(m < 10 ? "0" + m : m);
            }

            function hour() {
                h--;
                if (h < 0) {
                    h = 23;
                    d--;
                    $d.text(d < 10 ? "0" + d : d);
                }
                $h.text(h < 10 ? "0" + h : h);
            }

        });
    },

    

    //增减框
    numberInput: function () {

        /*
     * min : 最小值 
     * step : 每次增长的值 例如data-step=50 每次增加50个  
     */
        $(this).each(function (index, ele) {
            var $input = $(ele).find("input");
            var min = $(ele).data("min");
            var step = $(ele).data("step") || 1;
            var flag = $(ele).data("flag") || 1;    //标识用来判断是否需要做失去焦点的检测
            var buy = $(ele).data("buy");           //购买数量
            if (buy) {
                //如果有购买数量 那么初始化的时候就不使用最小值
                $input.val(buy);
            } else {
                $input.val(min);
            }
            

            // $input.val(min);

            $input.blur(function () {
               
                if (flag === 1) {
                    //校验输入框的值 不为Nan,不小于最小值,为step的倍数
                    if (check($input, min, step)) {
                        $input.val(min);
                    }
                } else {
                    return;
                }
                
            });

            //数量加减
            $(ele).find(".add,.reduce").click(function () {
                var symbol = $(this).hasClass("add") ? 1 : -1;
                var newval = parseInt($input.val()) + symbol * step;


                if (newval < min) {
                    layer.msg("数量不能少于" + min + "哦");
                    newval = min;
                    $input.val(newval);
                } else {
                    $input.val(newval);
                }
                //newval = newval < min ? min : newval;
                //$input.val(newval);
            });
        });

        function check(obj, min, step) {
            var rect = /^[0-9]*$/;
            if (isNaN(obj.val()) || !rect.test(obj.val())) {
                layer.msg("必须填写整数");
                return true;
            }
            if (obj.val() < min) {
                layer.msg("数量不能少于" + min + "哦");
                return true;
            }
            if ((obj.val() - min) % step !== 0) {
                layer.msg("数量必须为" + step + "的倍数");
                return true;
            }
        }
    },


});










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值