基于vue3写的简单购物商城项目
技术:vue.js
概述
基于vue3所写的商城类型项目运用vue3自带setup所写供大家参考
详细
项目结构
1,登录页
2,注册页
3,首页
4,购物车页面
5,分类页
6,我的页面
6,详情页
7,首页代码引用组件
<div id="home"> <nav-bar> <template v-slot:default>图书兄弟</template> </nav-bar> <tab-control v-show="isTabFixed" @tabClick="tabClick" :titles="['畅销', '新书', '精选']" ></tab-control> <div class="wrapper"> <div class="content"> <div ref="banref"> <home-swiper :banners="banners"></home-swiper> <recommend-view :recommends="recommends"></recommend-view> </div> <tab-control @tabClick="tabClick" :titles="['畅销', '新书', '精选']" ></tab-control> <goods-list :goods="showGoods"></goods-list> </div> </div> <back-top @bTop="bTop" v-show="isShowBackTop"></back-top> </div>
<script> import HomeSwiper from "./ChildComps/HomeSwiper"; import NavBar from "components/common/navbar/NavBar"; import RecommendView from "./ChildComps/RecommendView"; import TabControl from "components/content/tabControl/TabControl"; import GoodsList from "components/content/goods/GoodsList"; import BackTop from "components/common/backtop/BackTop"; import { getHomeAllData, getHomeGoods } from "network/home"; import { ref, reactive, onMounted, computed, watchEffect, nextTick } from "vue"; import BScroll from "better-scroll"; export default { name: "Home", setup() { let isTabFixed = ref(false); let isShowBackTop = ref(false); let banref = ref(null); const recommends = ref([]); // 商品列表数据模型 const goods = reactive({ sales: { page: 1, list: [] }, new: { page: 1, list: [] }, recommend: { page: 1, list: [] }, }); let currentType = ref("sales"); const showGoods = computed(() => { return goods[currentType.value].list; }); let bscroll = reactive({}); let banners = ref([]); onMounted(() => { getHomeAllData().then((res) => { recommends.value = res.goods.data; banners.value = res.slides; }); getHomeGoods("sales").then((res) => { goods.sales.list = res.goods.data; }); getHomeGoods("recommend").then((res) => { goods.recommend.list = res.goods.data; }); getHomeGoods("new").then((res) => { goods.new.list = res.goods.data; }); // 创建BetterScroll对象 bscroll = new BScroll(document.querySelector(".wrapper"), { probeType: 3, // 0, 1, 2, 3, 3 只要在运运就触发scroll事件 click: true, // 是否允许点击 pullUpLoad: true, //上拉加载更多, 默认是false }); //触发滚动事件 bscroll.on("scroll", (position) => { console.log(banref.value.offsetHeight); console.log(-position.y); isShowBackTop.value = isTabFixed.value = -position.y > banref.value.offsetHeight; }); // 上拉加载数据,触发pullingUp bscroll.on("pullingUp", () => { console.log("上拉加载更多....."); const page = goods[currentType.value].page + 1; getHomeGoods(currentType.value, page).then((res) => { goods[currentType.value].list.push(...res.goods.data); goods[currentType.value].page += 1; }); // 完成上拉, 等数据请求完成, 要将新数据展示出来 bscroll.finishPullUp(); //重新计算高度 bscroll.refresh(); console.log( "contentheight:" + document.querySelector(".content").clientHeight ); console.log("当前类型:" + currentType.value + ",当前页:" + page); }); }); const tabClick = (index) => { let types = ["sales", "new", "recommend"]; currentType.value = types[index]; nextTick(() => { // 重新计算高度 bscroll && bscroll.refresh(); }); }; // 监听 任何一个变量有变量 watchEffect(() => { nextTick(() => { // 重新计算高度 bscroll && bscroll.refresh(); }); }); const bTop = () => { bscroll.scrollTo(0, 0, 500); }; return { recommends, tabClick, goods, showGoods, isTabFixed, isShowBackTop, banref, bTop, banners, }; }, components: { HomeSwiper, NavBar, RecommendView, TabControl, BackTop, GoodsList, }, }; </script>
<style scoped> .banners img { width: 100%; height: auto; } #home { height: 100vh; position: relative; } .wrapper { position: absolute; top: 45px; bottom: 50px; left: 0px; right: 0px; overflow: hidden; }
7,登录校验需要用邮箱来登录
启用项目:npm run serve
引用组件库:vant
项目依赖,node.js
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码