diff --git a/src/App.js b/src/App.js index 028be10..4a1f99f 100644 --- a/src/App.js +++ b/src/App.js @@ -11,6 +11,9 @@ import touchIcon from "./touch.png"; import model from "./model-stride16.json"; import moment from "moment"; import "moment/locale/zh-cn"; +import images from "./images/coupon/image-helper"; +import Product from "./components/product"; +import "./glow.scss"; moment.locale("zh-cn"); const videoWidth = 600; @@ -33,8 +36,16 @@ const App = () => { const [minutes, setMinutes] = useState(0); const [seconds, setSeconds] = useState(0); const shop = shops[shopIndex]; + const { + categories, + categoryIconMap, + categoryProductsMap, + categoryIcon1Map, + } = shop; const [itemData, setItem] = useState(null); const [resetTimer, setResetTimer] = useState(null); + const [showMenu, setShowMenu] = useState(false); + const [currentTab, setCurrentTab] = useState(null); useEffect(() => { if (!posenetModel) { @@ -75,7 +86,7 @@ const App = () => { } }, [video]); - const initWall = () => { + const initWall = async () => { const { items, imgWidth, imgHeight } = shop; const wall = new Wall({ items, @@ -93,7 +104,7 @@ const App = () => { useEffect(() => { if (seconds) { - if (posenetModel && video && !item) + if (posenetModel && video && !item && !showMenu) posenetModel .estimatePoses(video, { flipHorizontal: true, @@ -119,7 +130,7 @@ const App = () => { if (wall && sphere) { wall.attachSphere(sphere); } - }, [wall]); + }, [wall, sphere]); useEffect(() => { if (!sphere) { @@ -131,7 +142,10 @@ const App = () => { width, }); setSphere(sphere); - initWall(); + } else { + initWall().then((wall) => { + wall.attachSphere(sphere); + }); } }, [sphere]); @@ -153,11 +167,13 @@ const App = () => { item = null; setItem(item); sphere.displacement = displacement; + if (showMenu) setShowMenu(false); + setCurrentTab(null); }; const startTiming = () => { if (resetTimer) clearInterval(resetTimer); - setResetTimer(setInterval(unFocus, 60 * 10 * 1000)); + setResetTimer(setInterval(unFocus, 60 * 1000)); }; // useEffect(() => { // if (minutes > 0) { @@ -196,12 +212,29 @@ const App = () => { - {list.map(([key, el, i]) => ( + {list.map(([key, el]) => (
+
+ {Number(key) % 60 === 0 && ( +
+
+
+
+
+ )} + {Number(key) % 60 === 0 &&
} +
{ className={"mist" + (itemData ? "" : " inactive")} style={sphere.style} > -
+ {!showMenu && ( +
+ )} {itemData && } - {!itemData && } + {!itemData && !showMenu && ( + + )} +
+ )} + {(itemData || showMenu) && ( +
+
{ + if (itemData) { + setShowMenu(true); + setItem(null); + } else { + unFocus(); + } + }} + >
+
+ )} + {showMenu && ( +
+
+
+ {[ + { icon: images["all"], title: "全部商品", name: null }, + ...categories.map((cat) => ({ + icon: categoryIconMap[cat], + title: cat + "品类", + name: cat, + })), + ].map((tab) => ( +
setCurrentTab(tab.name)} + > + +
{tab.title}
+
+ ))} +
+
+
+ {categories + .filter((cat) => + currentTab === null ? true : cat === currentTab + ) + .map((name) => { + const products = categoryProductsMap[name]; + const icon = categoryIcon1Map[name]; + return ( +
+
{name}
+ {products.map((name) => ( + + ))} +
+ ); + })} +
)}
diff --git a/src/App.scss b/src/App.scss index 96ed7bc..6d7fb22 100644 --- a/src/App.scss +++ b/src/App.scss @@ -12,6 +12,124 @@ display: flex; flex-direction: column; overflow: hidden; + .menu { + position: absolute; + width: 100%; + height: 100%; + z-index: 99; + .side { + flex: 0 0 290px; + padding: 450px 40px 0 35px; + .cats { + width: 216px; + background: rgba(0, 0, 0, 0.8); + border-radius: 10px; + padding: 12px; + .cat { + height: 70px; + line-height: 70px; + vertical-align: middle; + font-size: 18px; + font-family: SourceHanSansCN, SourceHanSansCN-Bold; + font-weight: 700; + color: #fff; + &.active { + background: #797ae0; + border-radius: 6px; + } + img { + width: 20px; + height: 20px; + margin: auto 37px auto 25px; + } + } + } + } + .main { + flex: 0 0 709px; + height: 100vh; + overflow-y: scroll; + padding-top: 400px; + text-align: left; + .cat { + .cat-name { + margin-bottom: 12px; + font-size: 36px; + font-family: FZLTCHK; + text-align: left; + color: #fff; + line-height: 41px; + text-shadow: #3e3a39 0 0 10px; + } + .prod { + margin-right: 16px; + margin-bottom: 24px; + } + } + .cat + .cat { + margin-top: 56px; + } + + &::-webkit-scrollbar { + display: none; + } + } + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 700px; + z-index: -1; + background: linear-gradient(180deg, rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0)); + } + &::after { + content: ""; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 700px; + z-index: -1; + background: linear-gradient(180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.7)); + } + } + .sideBar { + @keyframes sideBarEnter { + from { + right: -60px; + } + to { + right: 0; + } + } + animation: 0.25s sideBarEnter ease-in; + position: absolute; + right: 0; + top: 0; + width: 80px; + height: 100vh; + z-index: 100; + background-size: cover; + background-position: center; + &.open { + background-image: url(./open.png); + } + &.close { + background-image: url(./close.png); + } + .click-area { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + margin: auto; + width: 60px; + height: 60px; + } + } .header { position: absolute; top: 44px; @@ -67,10 +185,8 @@ } .block-wrapper { position: absolute; - // border: 1px solid rgb(224, 224, 224); opacity: 1; - &::before { - content: ""; + .wrapper { position: absolute; top: -5px; left: -5px; diff --git a/src/close.png b/src/close.png new file mode 100644 index 0000000..6c02131 Binary files /dev/null and b/src/close.png differ diff --git a/src/components/product.jsx b/src/components/product.jsx new file mode 100644 index 0000000..9466b9e --- /dev/null +++ b/src/components/product.jsx @@ -0,0 +1,14 @@ +import React from "react"; +import "./product.scss"; +const Product = ({ url, name, meta, icon }) => ( +
+ +
{name}
+
+
{meta}
+
+ +
+
+); +export default Product; diff --git a/src/components/product.scss b/src/components/product.scss new file mode 100644 index 0000000..693d474 --- /dev/null +++ b/src/components/product.scss @@ -0,0 +1,34 @@ +.prod { + display: inline-block; + width: 200px; + height: 259px; + background: #ffffff; + border-radius: 6px; + padding: 10px; + .avatar { + width: 180px; + height: 180px; + } + .name { + font-size: 18px; + font-family: FZLTHK; + text-align: left; + color: #3e3a39; + line-height: 21px; + margin-top: 19px; + } + .sub { + font-size: 24px; + font-family: ChaletComprime, ChaletComprime-CologneSixty; + font-weight: CologneSixty; + text-align: left; + color: #7f7673; + line-height: 24px; + vertical-align: middle; + } + .icon { + margin: auto; + width: 20px; + height: 20px; + } +} diff --git a/src/components/shop.scss b/src/components/shop.scss index 4d2851f..a389ecb 100644 --- a/src/components/shop.scss +++ b/src/components/shop.scss @@ -5,16 +5,6 @@ box-sizing: border-box; padding: 50px; padding-top: 203px; - .row { - display: flex; - } - .col { - display: flex; - flex-direction: column; - } - .fill { - flex: 1; - } @keyframes fadeIn { from { opacity: 0; diff --git a/src/data/Shops.js b/src/data/Shops.js index ec5df52..6560986 100644 --- a/src/data/Shops.js +++ b/src/data/Shops.js @@ -12,6 +12,24 @@ const shops = [ 母婴: coupon["c3"], 生鲜: coupon["c4"], }, + categoryIconMap: { + 零食: coupon["snack"], + 饮料: coupon["drink"], + 母婴: coupon["nurse"], + 生鲜: coupon["fresh"], + }, + categoryIcon1Map: { + 零食: coupon["snack1"], + 饮料: coupon["drink1"], + 母婴: coupon["nurse1"], + 生鲜: coupon["fresh1"], + }, + categoryProductsMap: { + 零食: ["零食1", "零食2", "零食3", "零食4", "零食5", "零食6"], + 饮料: ["饮料1", "饮料2", "饮料3", "饮料4", "饮料5", "饮料6"], + 母婴: ["母婴1", "母婴2", "母婴3", "母婴4", "母婴5", "母婴6"], + 生鲜: ["生鲜1", "生鲜2", "生鲜3", "生鲜4", "生鲜5", "生鲜6"], + }, items: [ { id: 1, diff --git a/src/glow.scss b/src/glow.scss new file mode 100644 index 0000000..ae67bc8 --- /dev/null +++ b/src/glow.scss @@ -0,0 +1,146 @@ +.AchievementIconWrapper { +} + +.AchievementIconGlowContainerRoot, +.AchievementIconGlowContainer, +.AchievementIconGlow { + position: absolute; + top: -10px; + right: -10px; + bottom: -10px; + left: -10px; +} + +.AchievementIconGlowContainerRoot { + -webkit-mask-image: url(data:image/png;base64,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); + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 100% 100%; +} + +.AchievementIconGlowContainer { + animation-name: rotate; + animation-duration: 18s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: reverse; + -webkit-mask-image: url(data:image/png;base64,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); + -webkit-mask-repeat: no-repeat; + -webkit-mask-size: 100% 100%; +} + +.AchievementIconGlow { + animation-name: rotate; + animation-duration: 6s; + animation-timing-function: linear; + animation-iteration-count: infinite; +} + +.fakeIcon { + background: #fff; + height: 190px; + width: 100px; +} + +/********************************************\ +|* Color Modifiers *| +\********************************************/ +.AchievementIconWrapper.CommonAchievement .AchievementIconGlow { + background: radial-gradient( + rgba(193, 193, 193, 0.26) 0%, + rgba(193, 193, 193, 0) 6%, + rgba(193, 193, 193, 0.26) 10%, + #969696 26%, + rgba(193, 193, 193, 0.26) 35%, + #969696 40%, + rgba(193, 193, 193, 0.26) 60%, + #969696 82%, + rgba(193, 193, 193, 0.26) 100% + ); +} + +.AchievementIconWrapper.CommonAchievement .fakeIcon { + box-shadow: 0px 0px 2px 1px rgba(150, 150, 150, 0.6), + 0px 0px 16px 1px rgba(150, 150, 150, 0.4); +} + +.AchievementIconWrapper.UncommonAchievement .AchievementIconGlow { + background: radial-gradient( + rgba(103, 239, 103, 0.26) 0%, + rgba(103, 239, 103, 0) 6%, + rgba(103, 239, 103, 0.26) 10%, + #45e045 26%, + rgba(103, 239, 103, 0.26) 35%, + #45e045 40%, + rgba(103, 239, 103, 0.26) 60%, + #4fff4f 82%, + rgba(103, 239, 103, 0.26) 100% + ); +} + +.AchievementIconWrapper.UncommonAchievement .fakeIcon { + box-shadow: 0px 0px 2px 1px rgba(69, 244, 69, 0.6), + 0px 0px 16px 1px rgba(69, 244, 69, 0.4); +} + +.AchievementIconWrapper.RareAchievement .AchievementIconGlow { + background: radial-gradient( + rgba(102, 165, 255, 0.26) 0%, + rgba(102, 165, 255, 0) 6%, + rgba(102, 165, 255, 0.26) 10%, + #4b7af2 26%, + rgba(102, 165, 255, 0.26) 35%, + #4b7af2 40%, + rgba(102, 165, 255, 0.26) 60%, + #4b7af2 82%, + rgba(102, 165, 255, 0.26) 100% + ); +} + +.AchievementIconWrapper.RareAchievement .fakeIcon { + box-shadow: 0px 0px 2px 1px rgba(75, 122, 242, 0.6), + 0px 0px 16px 1px rgba(75, 122, 242, 0.4); +} + +.AchievementIconWrapper.EpicAchievement .AchievementIconGlow { + background: radial-gradient( + rgba(204, 109, 255, 0.26) 0%, + rgba(204, 109, 255, 0) 6%, + rgba(204, 109, 255, 0.26) 10%, + #c14fff 26%, + rgba(204, 109, 255, 0.26) 35%, + #c14fff 40%, + rgba(204, 109, 255, 0.26) 60%, + #c14fff 82%, + rgba(204, 109, 255, 0.26) 100% + ); +} + +.AchievementIconWrapper.EpicAchievement .fakeIcon { + box-shadow: 0px 0px 2px 1px rgba(193, 79, 255, 0.6), + 0px 0px 16px 1px rgba(193, 79, 255, 0.4); +} + +.AchievementIconWrapper.LegendaryAchievement .AchievementIconGlow { + background: radial-gradient( + rgba(255, 201, 109, 0.178) 0%, + rgba(255, 201, 109, 0) 6%, + rgba(255, 201, 109, 0.178) 10%, + #ffb84e 26%, + rgba(255, 201, 109, 0.178) 35%, + #ffb84e 40%, + rgba(255, 201, 109, 0.178) 60%, + #ffb84e 82%, + rgba(255, 201, 109, 0.178) 100% + ); +} + +.AchievementIconWrapper.LegendaryAchievement .fakeIcon { + box-shadow: 0px 0px 2px 1px rgba(255, 184, 78, 0.6), + 0px 0px 16px 1px rgba(255, 217, 78, 0.4); +} + +@keyframes rotate { + to { + transform: rotate(1turn); + } +} diff --git a/src/images/coupon/all.png b/src/images/coupon/all.png new file mode 100644 index 0000000..6649c1e Binary files /dev/null and b/src/images/coupon/all.png differ diff --git a/src/images/coupon/all1.png b/src/images/coupon/all1.png new file mode 100644 index 0000000..bd27a9e Binary files /dev/null and b/src/images/coupon/all1.png differ diff --git a/src/images/coupon/drink.png b/src/images/coupon/drink.png new file mode 100644 index 0000000..2be925b Binary files /dev/null and b/src/images/coupon/drink.png differ diff --git a/src/images/coupon/drink1.png b/src/images/coupon/drink1.png new file mode 100644 index 0000000..3e3c63e Binary files /dev/null and b/src/images/coupon/drink1.png differ diff --git a/src/images/coupon/fresh.png b/src/images/coupon/fresh.png new file mode 100644 index 0000000..1d26f94 Binary files /dev/null and b/src/images/coupon/fresh.png differ diff --git a/src/images/coupon/fresh1.png b/src/images/coupon/fresh1.png new file mode 100644 index 0000000..a5a1884 Binary files /dev/null and b/src/images/coupon/fresh1.png differ diff --git a/src/images/coupon/nurse.png b/src/images/coupon/nurse.png new file mode 100644 index 0000000..d7936f1 Binary files /dev/null and b/src/images/coupon/nurse.png differ diff --git a/src/images/coupon/nurse1.png b/src/images/coupon/nurse1.png new file mode 100644 index 0000000..da07786 Binary files /dev/null and b/src/images/coupon/nurse1.png differ diff --git a/src/images/coupon/snack.png b/src/images/coupon/snack.png new file mode 100644 index 0000000..9421953 Binary files /dev/null and b/src/images/coupon/snack.png differ diff --git a/src/images/coupon/snack1.png b/src/images/coupon/snack1.png new file mode 100644 index 0000000..bf44f0b Binary files /dev/null and b/src/images/coupon/snack1.png differ diff --git a/src/images/coupon/母婴1.jpg b/src/images/coupon/母婴1.jpg new file mode 100644 index 0000000..612445f Binary files /dev/null and b/src/images/coupon/母婴1.jpg differ diff --git a/src/images/coupon/母婴2.jpg b/src/images/coupon/母婴2.jpg new file mode 100644 index 0000000..feff457 Binary files /dev/null and b/src/images/coupon/母婴2.jpg differ diff --git a/src/images/coupon/母婴3.jpg b/src/images/coupon/母婴3.jpg new file mode 100644 index 0000000..cc2fa5d Binary files /dev/null and b/src/images/coupon/母婴3.jpg differ diff --git a/src/images/coupon/母婴4.jpg b/src/images/coupon/母婴4.jpg new file mode 100644 index 0000000..7d53825 Binary files /dev/null and b/src/images/coupon/母婴4.jpg differ diff --git a/src/images/coupon/母婴5.jpg b/src/images/coupon/母婴5.jpg new file mode 100644 index 0000000..4be449a Binary files /dev/null and b/src/images/coupon/母婴5.jpg differ diff --git a/src/images/coupon/母婴6.jpg b/src/images/coupon/母婴6.jpg new file mode 100644 index 0000000..31403ec Binary files /dev/null and b/src/images/coupon/母婴6.jpg differ diff --git a/src/images/coupon/生鲜1.jpg b/src/images/coupon/生鲜1.jpg new file mode 100644 index 0000000..9fb8306 Binary files /dev/null and b/src/images/coupon/生鲜1.jpg differ diff --git a/src/images/coupon/生鲜2.jpg b/src/images/coupon/生鲜2.jpg new file mode 100644 index 0000000..68aa186 Binary files /dev/null and b/src/images/coupon/生鲜2.jpg differ diff --git a/src/images/coupon/生鲜3.jpg b/src/images/coupon/生鲜3.jpg new file mode 100644 index 0000000..e26ef00 Binary files /dev/null and b/src/images/coupon/生鲜3.jpg differ diff --git a/src/images/coupon/生鲜4.jpg b/src/images/coupon/生鲜4.jpg new file mode 100644 index 0000000..e380061 Binary files /dev/null and b/src/images/coupon/生鲜4.jpg differ diff --git a/src/images/coupon/生鲜5.jpg b/src/images/coupon/生鲜5.jpg new file mode 100644 index 0000000..0d6eab0 Binary files /dev/null and b/src/images/coupon/生鲜5.jpg differ diff --git a/src/images/coupon/生鲜6.jpg b/src/images/coupon/生鲜6.jpg new file mode 100644 index 0000000..19aaff9 Binary files /dev/null and b/src/images/coupon/生鲜6.jpg differ diff --git a/src/images/coupon/零食1.jpg b/src/images/coupon/零食1.jpg new file mode 100644 index 0000000..b66ccd9 Binary files /dev/null and b/src/images/coupon/零食1.jpg differ diff --git a/src/images/coupon/零食2.jpg b/src/images/coupon/零食2.jpg new file mode 100644 index 0000000..41ff89c Binary files /dev/null and b/src/images/coupon/零食2.jpg differ diff --git a/src/images/coupon/零食3.jpg b/src/images/coupon/零食3.jpg new file mode 100644 index 0000000..43a5ab9 Binary files /dev/null and b/src/images/coupon/零食3.jpg differ diff --git a/src/images/coupon/零食4.jpg b/src/images/coupon/零食4.jpg new file mode 100644 index 0000000..bb9a7bc Binary files /dev/null and b/src/images/coupon/零食4.jpg differ diff --git a/src/images/coupon/零食5.jpg b/src/images/coupon/零食5.jpg new file mode 100644 index 0000000..407e61d Binary files /dev/null and b/src/images/coupon/零食5.jpg differ diff --git a/src/images/coupon/零食6.jpg b/src/images/coupon/零食6.jpg new file mode 100644 index 0000000..633f543 Binary files /dev/null and b/src/images/coupon/零食6.jpg differ diff --git a/src/images/coupon/饮料1.jpg b/src/images/coupon/饮料1.jpg new file mode 100644 index 0000000..fbf1acf Binary files /dev/null and b/src/images/coupon/饮料1.jpg differ diff --git a/src/images/coupon/饮料2.jpg b/src/images/coupon/饮料2.jpg new file mode 100644 index 0000000..720ad37 Binary files /dev/null and b/src/images/coupon/饮料2.jpg differ diff --git a/src/images/coupon/饮料3.jpg b/src/images/coupon/饮料3.jpg new file mode 100644 index 0000000..03adde9 Binary files /dev/null and b/src/images/coupon/饮料3.jpg differ diff --git a/src/images/coupon/饮料4.jpg b/src/images/coupon/饮料4.jpg new file mode 100644 index 0000000..e7b77e4 Binary files /dev/null and b/src/images/coupon/饮料4.jpg differ diff --git a/src/images/coupon/饮料5.jpg b/src/images/coupon/饮料5.jpg new file mode 100644 index 0000000..1a46aed Binary files /dev/null and b/src/images/coupon/饮料5.jpg differ diff --git a/src/images/coupon/饮料6.jpg b/src/images/coupon/饮料6.jpg new file mode 100644 index 0000000..18edea8 Binary files /dev/null and b/src/images/coupon/饮料6.jpg differ diff --git a/src/index.css b/src/index.css index 1ef25b8..14f16aa 100644 --- a/src/index.css +++ b/src/index.css @@ -15,3 +15,13 @@ code { font-family: "ChaletComprime"; src: url("./Chalet\ Comprime\ Cologne\ Sixty.ttf") format("truetype"); } +.row { + display: flex; +} +.col { + display: flex; + flex-direction: column; +} +.fill { + flex: 1; +} diff --git a/src/models/Wall.js b/src/models/Wall.js index 5416540..f67c4a8 100644 --- a/src/models/Wall.js +++ b/src/models/Wall.js @@ -4,7 +4,7 @@ import Stats from "stats.js"; const stats = new Stats(); stats.showPanel(0); -document.body.appendChild(stats.dom); +// document.body.appendChild(stats.dom); export const easeIn = BezierEasing(0.5, 0.16, 0.74, 0.38); export const easeOut = BezierEasing(0, 0, 0.58, 1); @@ -50,7 +50,6 @@ class El { } update() {} } - class Row { q = []; est; @@ -183,7 +182,8 @@ export default class Wall { } getNext() { const { items } = this; - const next = items[this.index]; + const index = Math.floor(Math.random() * items.length); + const next = items[index]; this.index++; if (this.index === items.length) this.index = 0; return next; diff --git a/src/open.png b/src/open.png new file mode 100644 index 0000000..98990b7 Binary files /dev/null and b/src/open.png differ