小草文具店_H5/app.js · 约 3574 字符
1// 小草文具店 · 交互逻辑
2document.addEventListener('click', function (e) {
3 var t = e.target.closest('[data-toast]');
4 if (t) { toast(t.getAttribute('data-toast')); }
5 var ct = e.target.closest('.cat-tab');
6 if (ct) {
7 var wrap = ct.parentElement;
8 [].forEach.call(wrap.children, function (x) { x.classList.remove('sel'); });
9 ct.classList.add('sel');
10 var kw = ct.textContent;
11 var cards = document.querySelectorAll('.beef-card');
12 [].forEach.call(cards, function (c) {
13 c.style.display = (kw === '全部' || c.getAttribute('data-cat') === kw) ? 'flex' : 'none';
14 });
15 }
16 var so = e.target.closest('.sort-bar span');
17 if (so) {
18 var w2 = so.parentElement;
19 [].forEach.call(w2.children, function (x) { x.classList.remove('on'); });
20 so.classList.add('on');
21 }
22 var sp = e.target.closest('.spec-opt');
23 if (sp) {
24 var grp = sp.parentElement;
25 [].forEach.call(grp.children, function (x) { x.classList.remove('sel'); });
26 sp.classList.add('sel');
27 }
28 var sn = e.target.closest('.sr-num i');
29 if (sn) {
30 var b = sn.parentElement.querySelector('b');
31 var v = parseInt(b.textContent) || 1;
32 v = sn.textContent === '+' ? v + 1 : Math.max(1, v - 1);
33 b.textContent = v;
34 }
35 var ci = e.target.closest('.ci-num i');
36 if (ci) {
37 var b = ci.parentElement.querySelector('b');
38 var v = parseInt(b.textContent) || 1;
39 v = ci.textContent === '+' ? v + 1 : Math.max(1, v - 1);
40 b.textContent = v;
41 }
42 var ck = e.target.closest('.ci-check');
43 if (ck) { ck.parentElement.classList.toggle('checked'); ck.classList.toggle('on'); }
44 var opt = e.target.closest('.cb-val .opt');
45 if (opt) {
46 var grp = opt.parentElement;
47 [].forEach.call(grp.children, function (x) { x.classList.remove('sel'); });
48 opt.classList.add('sel');
49 }
50 var pw = e.target.closest('.pw-item');
51 if (pw) {
52 var box = pw.parentElement;
53 [].forEach.call(box.children, function (x) { x.classList.remove('sel'); });
54 pw.classList.add('sel');
55 }
56 var sg = e.target.closest('.sign-btn');
57 if (sg && !sg.classList.contains('done')) { sg.classList.add('done'); sg.textContent = '今日已签到 +10 积分'; toast('签到成功,积分 +10'); }
58 var rg = e.target.closest('.recharge-opt');
59 if (rg) {
60 var grp = rg.parentElement;
61 [].forEach.call(grp.children, function (x) { x.classList.remove('sel'); });
62 rg.classList.add('sel');
63 }
64 var cp = e.target.closest('.cc-btn');
65 if (cp) { cp.textContent = '已领取'; cp.style.opacity = '.6'; toast('优惠券已到账'); }
66 var pl = e.target.closest('.pi-switch');
67 if (pl) { pl.parentElement.classList.toggle('off'); }
68});
69// 秒杀倒计时
70(function () {
71 var box = document.querySelector('.sk-time');
72 if (!box) return;
73 var total = 2 * 3600 + 12 * 60 + 40;
74 setInterval(function () {
75 total--;
76 if (total < 0) total = 86399;
77 var h = Math.floor(total / 3600), m = Math.floor(total % 3600 / 60), s = total % 60;
78 var z = function (n) { return n < 10 ? '0' + n : '' + n; };
79 box.innerHTML = '<i>' + z(h) + '</i>:<i>' + z(m) + '</i>:<i>' + z(s) + '</i>';
80 }, 1000);
81})();
82function toast(msg) {
83 var d = document.createElement('div');
84 d.style.cssText = 'position:fixed;left:50%;bottom:110px;transform:translateX(-50%);background:rgba(49,46,129,.92);color:#fff;padding:10px 20px;border-radius:20px;font-size:13px;z-index:999';
85 d.textContent = msg;
86 document.body.appendChild(d);
87 setTimeout(function () { d.remove(); }, 1800);
88}
89