当前位置: 首页 > news >正文

企业家居网站建设兰州网页

企业家居网站建设,兰州网页,同城网站建设,在萍乡谁可以做网站文章目录 知识回顾前言源码分析1. ref2. 购物车案例分析3. 购物车计算、全选 拓展知识数据持久化localStorage 总结 知识回顾 前言 元素上使用 ref属性关联响应式数据#xff0c;获取DOM元素 步骤 ● 创建 ref const hRef ref(null) ● 模板中建立关联 h1 re… 文章目录 知识回顾前言源码分析1. ref2. 购物车案例分析3. 购物车计算、全选 拓展知识数据持久化localStorage 总结 知识回顾 前言 元素上使用 ref属性关联响应式数据获取DOM元素 步骤 ● 创建 ref const hRef ref(null) ● 模板中建立关联 h1 refhRef我是标题/h1 hRef.value源码分析 1. ref const inp refnull | HTMLInputElement() const img refnull | HTMLImageElement() vue script setup langts import { onMounted, ref } from vueconst words ref() const inp refnull | HTMLInputElement() const img refnull | HTMLImageElement() onMounted(() {console.log(onMounted)inp.value?.focus()img.valueconsole.log(img.value)console.log(inp.value) }) /scripttemplatediv classcontainer idappdiv classsearch-containerimg refimg srchttps:// alt /div classsearch-boxinput refinp typetext v-modelwords idinp /button搜索一下/button/div/div/div /templatestyle html, body {height: 100%; }.search-container {position: absolute;top: 30%;left: 50%;transform: translate(-50%, -50%);text-align: center; }.search-container .search-box {display: flex; }.search-container img {margin-bottom: 30px; }.search-container .search-box input {width: 512px;height: 16px;padding: 12px 16px;font-size: 16px;margin: 0;vertical-align: top;outline: 0;box-shadow: none;border-radius: 10px 0 0 10px;border: 2px solid #c4c7ce;background: #fff;color: #222;overflow: hidden;box-sizing: content-box;-webkit-tap-highlight-color: transparent; }.search-container .search-box button {cursor: pointer;width: 112px;height: 44px;line-height: 41px;line-height: 42px;background-color: #ad2a27;border-radius: 0 10px 10px 0;font-size: 17px;box-shadow: none;font-weight: 400;border: 0;outline: 0;letter-spacing: normal;color: white; }body {background: no-repeat center / cover;background-color: #edf0f5; } /style 2. 购物车案例分析 列表渲染、购物车增加删除 css .app-container {padding-bottom: 300px;width: 800px;margin: 0 auto; } media screen and (max-width: 800px) {.app-container {width: 600px;} } .app-container .banner-box {border-radius: 20px;overflow: hidden;margin-bottom: 10px; } .app-container .banner-box img {width: 100%; } .app-container .nav-box {background: #ddedec;height: 60px;border-radius: 10px;padding-left: 20px;display: flex;align-items: center; } .app-container .nav-box .my-nav {display: inline-block;background: #5fca71;border-radius: 5px;width: 90px;height: 35px;color: white;text-align: center;line-height: 35px;margin-right: 10px; }.breadcrumb {font-size: 16px;color: gray; } .table {width: 100%;text-align: left;border-radius: 2px 2px 0 0;border-collapse: separate;border-spacing: 0; } .th {color: rgba(0, 0, 0, 0.85);font-weight: 500;text-align: left;background: #fafafa;border-bottom: 1px solid #f0f0f0;transition: background 0.3s ease; } .th.num-th {flex: 1.5; } .th {text-align: center; } .th:nth-child(4), .th:nth-child(5), .th:nth-child(6), .th:nth-child(7) {text-align: center; } .th.th-pic {flex: 1.3; } .th:nth-child(6) {flex: 1.3; }.th, .td {position: relative;padding: 16px 16px;overflow-wrap: break-word;flex: 1; } .pick-td {font-size: 14px; } .main, .empty {border: 1px solid #f0f0f0;margin-top: 10px; } .tr {display: flex;cursor: pointer;border-bottom: 1px solid #ebeef5; } .tr.active {background-color: #f5f7fa; } .td {display: flex;justify-content: center;align-items: center; }.table img {width: 100px;height: 100px; }button {outline: 0;box-shadow: none;color: #fff;background: #d9363e;border-color: #d9363e;color: #fff;background: #d9363e;border-color: #d9363e;line-height: 1.5715;position: relative;display: inline-block;font-weight: 400;white-space: nowrap;text-align: center;background-image: none;border: 1px solid transparent;box-shadow: 0 2px 0 rgb(0 0 0 / 2%);cursor: pointer;transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;touch-action: manipulation;height: 32px;padding: 4px 15px;font-size: 14px;border-radius: 2px; } button.pay {background-color: #3f85ed;margin-left: 20px; }.bottom {height: 60px;display: flex;align-items: center;justify-content: space-between;padding-right: 20px;border: 1px solid #f0f0f0;border-top: none;padding-left: 20px; } .right-box {display: flex;align-items: center; } .check-all {cursor: pointer; } .price {color: hotpink;font-size: 30px;font-weight: 700; } .price-box {display: flex;align-items: center; } .empty {padding: 20px;text-align: center;font-size: 30px;color: #909399; } .my-input-number {display: flex; } .my-input-number button {height: 40px;color: #333;border: 1px solid #dcdfe6;background-color: #f5f7fa; } .my-input-number button:disabled {cursor: not-allowed!important; } .my-input-number .my-input__inner {height: 40px;width: 50px;padding: 0;border: none;border-top: 1px solid #dcdfe6;border-bottom: 1px solid #dcdfe6; }vue script setup langts import { ref } from vue// 定义水果对象的类型 interface Fruit {id: numbericon: stringisChecked: booleannum: numberprice: number }// 水果列表 const fruitList refFruit[]([{id: 1,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/ll.png,isChecked: true,num: 2,price: 6},{id: 2,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/smt.png,isChecked: false,num: 7,price: 20},{id: 3,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/tg.png,isChecked: false,num: 3,price: 40},{id: 4,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/xg.png,isChecked: false,num: 10,price: 3},{id: 5,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/yl.png,isChecked: false,num: 20,price: 34} ])// 删除商品 const delGoods (id: number) {fruitList.value fruitList.value.filter((item) item.id ! id) } // 添加 const addGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num } // 减少 const subGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num-- } /scripttemplatediv classapp-container idapp!-- 顶部banner --div classbanner-boximg srchttps://hongm-1312445828.cos.ap-nanjing.myqcloud.com/sg_top.png alt //div!-- 面包屑 --div classbreadcrumbspan/span/span购物车/span/div!-- 购物车主体 --div v-iffruitList.length 0 classmaindiv classtable!-- 头部 --div classtheaddiv classtrdiv classth选中/divdiv classth th-pic图片/divdiv classth单价/divdiv classth num-th个数/divdiv classth小计/divdiv classth操作/div/div/div!-- 身体 --div classtbodydivv-foritem in fruitList:keyitem.idclasstr:class{ active: item.isChecked }div classtdinput typecheckbox v-modelitem.isChecked //divdiv classtdimg :srcitem.icon alt //divdiv classtd{{ item.price }}/divdiv classtddiv classmy-input-numberbutton :disableditem.num 1 classdecrease clicksubGoods(item.id)-/buttonspan classmy-input__inner{{ item.num }}/spanbutton classincrease clickaddGoods(item.id)/button/div/divdiv classtd{{ item.price * item.num }}/divdiv classtd clickdelGoods(item.id)button删除/button/div/div/div/div!-- 底部 --div classbottom!-- 全选 --label classcheck-allinput typecheckbox /全选/labeldiv classright-box!-- 所有商品总价 --span classprice-box总价nbsp;nbsp;:nbsp;nbsp;¥nbsp;span classprice24/span/span!-- 结算按钮 --button classpay结算( 6 )/button/div/div/div!-- 空车 --div v-else classempty空空如也/div/div /templatestyle scoped import ./style/inputnumber.css; import ./style/index.css; /style 3. 购物车计算、全选 script setup langts import { computed, ref } from vue// 定义水果对象的类型 interface Fruit {id: numbericon: stringisChecked: booleannum: numberprice: number }// 水果列表 const fruitList refFruit[]([{id: 1,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/ll.png,isChecked: true,num: 2,price: 6},{id: 2,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/smt.png,isChecked: false,num: 7,price: 20},{id: 3,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/tg.png,isChecked: false,num: 3,price: 40},{id: 4,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/xg.png,isChecked: false,num: 10,price: 3},{id: 5,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/yl.png,isChecked: false,num: 20,price: 34} ])// 删除商品 const delGoods (id: number) {fruitList.value fruitList.value.filter((item) item.id ! id) } // 添加 const addGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num } // 减少 const subGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num-- }// 全选 const checkAll computed({get() {return fruitList.value.every((item) item.isChecked)},set(value) {fruitList.value.forEach((item) (item.isChecked value))} })// 统计选中的总数 reduce const totalCount computed(() {return fruitList.value.reduce((sum, item) {if (item.isChecked) {// 选中 → 需要累加return sum item.num} else {// 没选中 → 不需要累加return sum}}, 0) })// 总计选中的总价 num * price const totalPrice computed(() {return fruitList.value.reduce((sum, item) {if (item.isChecked) {return sum item.num * item.price} else {return sum}}, 0) }) /scripttemplatediv classapp-container idapp!-- 顶部banner --div classbanner-boximg srchttps://hongm-1312445828.cos.ap-nanjing.myqcloud.com/sg_top.png alt //div!-- 面包屑 --div classbreadcrumbspan/span/span购物车/span/div!-- 购物车主体 --div v-iffruitList.length 0 classmaindiv classtable!-- 头部 --div classtheaddiv classtrdiv classth选中/divdiv classth th-pic图片/divdiv classth单价/divdiv classth num-th个数/divdiv classth小计/divdiv classth操作/div/div/div!-- 身体 --div classtbodydivv-foritem in fruitList:keyitem.idclasstr:class{ active: item.isChecked }div classtdinput typecheckbox v-modelitem.isChecked //divdiv classtdimg :srcitem.icon alt //divdiv classtd{{ item.price }}/divdiv classtddiv classmy-input-numberbutton :disableditem.num 1 classdecrease clicksubGoods(item.id)-/buttonspan classmy-input__inner{{ item.num }}/spanbutton classincrease clickaddGoods(item.id)/button/div/divdiv classtd{{ item.price * item.num }}/divdiv classtd clickdelGoods(item.id)button删除/button/div/div/div/div!-- 底部 --div classbottom!-- 全选 --label classcheck-allinput typecheckbox v-modelcheckAll /全选/labeldiv classright-box!-- 所有商品总价 --span classprice-box总价nbsp;nbsp;:nbsp;nbsp;¥nbsp;span classprice{{ totalPrice }}/span/span!-- 结算按钮 --button classpay结算( {{ totalCount }} )/button/div/div/div!-- 空车 --div v-else classempty空空如也/div/div /templatestyle scoped import ./style/inputnumber.css; import ./style/index.css; /style 拓展知识 数据持久化localStorage script setup langts import { computed, ref, watch } from vue// 定义水果对象的类型 interface Fruit {id: numbericon: stringisChecked: booleannum: numberprice: number } const defaultData [{id: 1,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/ll.png,isChecked: true,num: 2,price: 6},{id: 2,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/smt.png,isChecked: false,num: 7,price: 20},{id: 3,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/tg.png,isChecked: false,num: 3,price: 40},{id: 4,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/xg.png,isChecked: false,num: 10,price: 3},{id: 5,icon: https://hongm-1312445828.cos.ap-nanjing.myqcloud.com/yl.png,isChecked: false,num: 20,price: 34} ]// 水果列表 let fruitList refFruit[](defaultData) const localStorageFruitList localStorage.getItem(fruitList) if (localStorageFruitList localStorageFruitList ! []) {fruitList.value JSON.parse(localStorageFruitList) }// 删除商品 const delGoods (id: number) {fruitList.value fruitList.value.filter((item) item.id ! id) } // 添加 const addGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num } // 减少 const subGoods (id: number) {const fruit fruitList.value.find((item) item.id id)fruit fruit.num-- }// 全选 const checkAll computed({get() {return fruitList.value.every((item) item.isChecked)},set(value) {fruitList.value.forEach((item) (item.isChecked value))} })// 统计选中的总数 reduce const totalCount computed(() {return fruitList.value.reduce((sum, item) {if (item.isChecked) {// 选中 → 需要累加return sum item.num} else {// 没选中 → 不需要累加return sum}}, 0) })// 总计选中的总价 num * price const totalPrice computed(() {return fruitList.value.reduce((sum, item) {if (item.isChecked) {return sum item.num * item.price} else {return sum}}, 0) })// 数据持久化方法 const saveData () {localStorage.setItem(fruitList, JSON.stringify(fruitList.value)) } const getData () {const fruitListStr localStorage.getItem(fruitList) } // 删除持久化 const delData () {localStorage.removeItem(fruitList) } // 清空持久化数据 const clearData () {localStorage.clear() } // 监听 watch(() fruitList.value, saveData, { deep: true, immediate: true }) /scripttemplatediv classapp-container idapp!-- 顶部banner --div classbanner-boximg srchttps://hongm-1312445828.cos.ap-nanjing.myqcloud.com/sg_top.png alt //div!-- 面包屑 --div classbreadcrumbspan/span/span购物车/span/div!-- 购物车主体 --div v-iffruitList.length 0 classmaindiv classtable!-- 头部 --div classtheaddiv classtrdiv classth选中/divdiv classth th-pic图片/divdiv classth单价/divdiv classth num-th个数/divdiv classth小计/divdiv classth操作/div/div/div!-- 身体 --div classtbodydivv-foritem in fruitList:keyitem.idclasstr:class{ active: item.isChecked }div classtdinput typecheckbox v-modelitem.isChecked //divdiv classtdimg :srcitem.icon alt //divdiv classtd{{ item.price }}/divdiv classtddiv classmy-input-numberbutton :disableditem.num 1 classdecrease clicksubGoods(item.id)-/buttonspan classmy-input__inner{{ item.num }}/spanbutton classincrease clickaddGoods(item.id)/button/div/divdiv classtd{{ item.price * item.num }}/divdiv classtd clickdelGoods(item.id)button删除/button/div/div/div/div!-- 底部 --div classbottom!-- 全选 --label classcheck-allinput typecheckbox v-modelcheckAll /全选/labeldiv classright-box!-- 所有商品总价 --span classprice-box总价nbsp;nbsp;:nbsp;nbsp;¥nbsp;span classprice{{ totalPrice }}/span/span!-- 结算按钮 --button classpay结算( {{ totalCount }} )/button/div/div/div!-- 空车 --div v-else classempty空空如也/div/div /templatestyle scoped import ./style/inputnumber.css; import ./style/index.css; /style 总结
http://www.hkea.cn/news/14540762/

相关文章:

  • 刚做的网站搜全名查不到大型集团网站
  • 做网站推广的公司发展前景开封网站建设培训学校
  • 找合伙人做网站微信公众号创建流程
  • 外贸网站推广优化网站监测怎么做
  • 网站建设管理情况汇报中文网站模板下载免费
  • 邯郸哪个公司做网站好内部网站 建设目标
  • 织梦网站怎么做伪静态汕头金平区
  • 怎么看小企业网站建设做速卖通代码的网站
  • 保定定兴网站建设揭阳网站免费建站
  • qq钓鱼网址制作手机版北京网站seo公司
  • 广西微信网站建设爱站网 关键词挖掘
  • dedecms网站模板免费下载厦门网站建设哪家不错推荐
  • 网站建设会议议程高端网站建设
  • 网站跟域名是什么关系网站建设目的及功能定位
  • 如何建设网页制作的网站网站设计案例方案
  • 规范 加强网站建设管理创业做旅游网站
  • 二手网站开发网络广告投放
  • 网站后台html模板下载logo设计公司价格
  • 营销型网站的要素长春
  • 顺平网站建设网站运营小结
  • 网站设计与网页配色实例精讲东莞seo推广优化排名
  • 宁波网站建设详细策划营销策略主要包括哪些
  • 软件培训网站阿里巴巴有几个网站是做外贸的
  • 随便玩玩在线制作网站wordpress连接微博源码
  • 网站设计工作室沧州高端网站建设公司
  • 大型网站稳定性建设视频课程hyperx wordpress 汉化
  • 泉州市培训建设系统中心网站云原神官方网站正版下载
  • 电子商务 网站系统成都网站建设门户
  • 湖南长沙门户网站Windows wordpress搭建
  • 网站静态化 更新wordpress如何修改后台网址