精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HarmonyOS ArkTS 電商項目實戰:買什么

系統 OpenHarmony
本項目只是UI頁面,數據都是本地的假數據,沒有網絡數據交互。頁面包括:首頁、分類、購物車、我的、詳情頁。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

項目介紹

最近HarmonyOS有所更新,抽空寫個電商項目《買什么》Demo練練手,本項目只是UI頁面,數據都是本地的假數據,沒有網絡數據交互。頁面包括:首頁、分類、購物車、我的、詳情頁。 項目基于HarmonyOS的ArkUI框架TS擴展的聲明式開發范式,關于語法和概念直接看官網官方文檔地址:??基于TS擴展的聲明式開發范式??。

  • 工具版本: DevEco Studio 3.1 Canary1。
  • SDK版本: 3.1.9.7(API Version 8 Release)。

效果演示

HarmonyOS ArkTS 電商項目實戰:買什么-開源基礎軟件社區

頁面解析

主框架

使用容器組件:Tabs 、TabContent、作為主框架,底部Tab使用自定義布局樣式,設置點擊事件,每次點擊更換選中的索引。來切換內容頁面。

使用自定義組件來實現:首頁、分類、購物車、我的的搭建。

@Entry
@Component
struct MainFrame {
@State selectIndex: number = 0
private controller: TabsController = new TabsController()
private tabBar = getTabBarList()
// 內容
@Builder Content() {
Tabs({ controller: this.controller }) {
TabContent() {HomeComponent()}
TabContent() {ClassifyComponent()}
TabContent() {ShoppingCartComponent({ isShowLeft: false })}
TabContent() {MyComponent()}
}
.width('100%')
.height(0)
.animationDuration(0)
.layoutWeight(1)
.scrollable(false)
.barWidth(0)
.barHeight(0)
}
// 底部導航
@Builder TabBar() {
Row() {
ForEach(this.tabBar, (item: TabBarModel, index) => {
Column() {
Image(this.selectIndex === index ? item.iconSelected : item.icon)
.width(23).height(23).margin({ right: index === 2 ? 3 : 0 })
Text(item.name)
.fontColor(this.selectIndex === index ? '#dc1c22' : '#000000')
.margin({ left: 1, top: 2 })
}.layoutWeight(1)
.onClick(() => {
this.selectIndex = index
this.controller.changeIndex(index)
})
}, item => item.name)
}.width('100%').height(50)
.shadow({ radius: 1, color: '#e3e2e2', offsetY: -1 })
}
build() {
Column() {
this.Content()
this.TabBar()
}.width('100%').height('100%')
}
}

首頁

因為頂部標題欄需要浮在內容之上,所以根布局使用容器組件Stack?,內容布局最外層使用容器組件Scroll 來實現滑動,內容整體分為3部分:

  1. 輪播圖:使用容器組件Swiper。
  2. 菜單:使用容器組件Flex、默認橫向布局,子布局寬度分為五等分,設置Flex的參數:wrap: FlexWrap.Wrap可實現自動換行。
  3. 商品列表:和菜單的實現方式一樣,只不過寬度是二等分。

向下滑動時標題欄顯示功能:使用 容器組件Scroll 的屬性方法:onScroll來判斷y軸方向的偏移量,根據偏移量計算出比例,改變標題欄的透明度。

HarmonyOS ArkTS 電商項目實戰:買什么-開源基礎軟件社區

以下是部分代碼:

@Component
export struct HomeComponent {
// 滑動的y偏移量
private yTotalOffset = 0
// 標題欄透明度
@State titleBarOpacity: number = 0
// 輪播圖列表
private banners = [
$r("app.media.banner1"), $r("app.media.banner2"), $r("app.media.banner3"),
$r("app.media.banner4"), $r("app.media.banner5"), $r("app.media.banner6"),
]
// 菜單列表
private menuList = getHomeMenuList()
// 商品列表
private goodsList: Array<HomeGoodsModel> = getHomeGoodsList()
// 輪播圖
@Builder Banner() {...}

// 菜單
@Builder Menu() {....}
// 商品列表
@Builder GoodsList() {...}
build() {
Stack({ alignContent: Alignment.Top }) {
Scroll() {
Column() {
this.Banner()
this.Menu()
this.GoodsList()
}.backgroundColor(Color.White)
}.scrollBar(BarState.Off)
.onScroll((xOffset, yOffset) => {
this.yTotalOffset += yOffset
const yTotalOffsetVP = px2vp(this.yTotalOffset)
// 輪播圖高度 350
const scale = yTotalOffsetVP / 200
this.titleBarOpacity = scale
})
Row(){
TitleBar({
title: '首頁',
isShowLeft: false,
isShowRight: true,
rightImage: $r('app.media.search')
})
}.opacity(this.titleBarOpacity)
}.width('100%').height('100%')
}
}

詳情頁

和首頁類似,根布局使用容器組件Stack,內容布局最外層使用容器組件Scroll 來實現滑動。因為詳情頁有相同布局,使用裝飾器@Builder來抽離公共布局。

向下滑動時標題欄顯示功能原理和首頁一樣。

HarmonyOS ArkTS 電商項目實戰:買什么-開源基礎軟件社區

以下是部分代碼:

import router from '@ohos.router';

@Entry
@Component
struct GoodsDetail {
....
// 輪播圖
@Builder Banner() {...}

// 內容item
@Builder ContentItem(title: string, content: string, top=1) {
Row() {
Text(title).fontSize(13).fontColor('#808080')
Text(content).fontSize(13).margin({ left: 10 }).fontColor('#ff323232')
Blank()
Image($r('app.media.arrow')).width(12).height(18)
}.width('100%').padding(13)
.backgroundColor(Color.White).margin({ top: top })
}
// 內容
@Builder Content() {
...
this.ContentItem('郵費', '滿80包郵', 7)
this.ContentItem('優惠', '減5元')
this.ContentItem('規格', '山核桃堅果曲奇; x3', 7)
this.ContentItem('配送', '北京市朝陽區大塔路33號')
}
// 評論
@Builder Comment() {...}
// 商品參數item
@Builder GoodsParamItem(title: string, content: string) {
Row() {
Text(title).width(100).fontSize(13).fontColor('#808080')
Text(content).fontSize(13).fontColor('#ff323232')
.layoutWeight(1).padding({ right: 20 })
}.width('100%').padding({ top: 15 })
.alignItems(VerticalAlign.Top)
}
// 商品參數
@Builder GoodsParam() {...}
build() {
Stack() {
Scroll() {
Column() {
this.Banner()
this.Content()
this.Comment()
this.GoodsParam()
}
}.scrollBar(BarState.Off)
.onScroll((xOffset, yOffset) => {
this.yTotalOffset += yOffset
const yTotalOffsetVP = px2vp(this.yTotalOffset)
// 輪播圖高度 350
const scale = yTotalOffsetVP / 350
this.titleBarBgTmOpacity = 1 - scale
if (scale > 0.4) {
this.titleBarBgWhiteOpacity = scale - 0.2
} else {
this.titleBarBgWhiteOpacity = 0
}
})
this.TopBottomOperateBar()
}.width('100%').height('100%')
.backgroundColor('#F4F4F4')
}
}

分類

此頁面很簡單,就是左右兩個容器組件List、一個寬度30%,一個寬度70%,使用循環渲染組件ForEach來渲染列表。

以下是部分代碼:

@Component
export struct ClassifyComponent {
// 搜索
@Builder Search() {...}
// 內容
@Builder Content() {
Row() {
// 左分類
List() {...}.width('30%')

// 右分類
List({scroller:this.scroller}) {...}.width('70%')
}.width('100%').layoutWeight(1)
.alignItems(VerticalAlign.Top)
}
build() {
Column() {
this.Search()
this.Content()
}.width('100%').height('100%')
.backgroundColor(Color.White)
}
}

購物車

此界面功能:全選、單選、刪除商品、更改商品的數量。當有商品選中,右上角刪除按鈕顯示。更改商品數量同步更新合計的總價格。

使用List組件來實現列表。數據數組使用裝飾器@State定義。數據更新必須是更改數組的項

HarmonyOS ArkTS 電商項目實戰:買什么-開源基礎軟件社區

以下是部分代碼:

@Component
export struct ShoppingCartComponent {
...
// 商品詳情
@Builder GoodsItem(item: ShoppingCartModel, index: number) {...}
build() {
Column() {
TitleBar()
if (this.list.length > 0) {
// 列表
List() {...}.layoutWeight(1)
// 結算布局
Row() {...}
} else {
Row() {
Text('空空如也~')
}
}
}.width('100%').height('100%')
.backgroundColor('#F4F4F4')
}
selectOperation(item: ShoppingCartModel, index: number) {
// 替換元素,才能更改數組,這樣頁面才能更新
let newItem: ShoppingCartModel = {
id: item.id,
image: item.image,
name: item.name,
category: item.category,
newPrice: item.newPrice,
oldPrice: item.oldPrice,
count: item.count,
isSelected: !item.isSelected
}
this.list.splice(index, 1, newItem)
this.calculateTotalPrice()
}
// 加/減操作
addOrSubtractOperation(item: ShoppingCartModel, index: number, type: -1 | 1) {...}
// 計算合計
calculateTotalPrice() {
let total = 0
let selectedCount = 0
for (const item of this.list) {
if (item.isSelected) {
selectedCount++
total += item.newPrice * item.count
}
}
this.totalPrice = total
this.isAllSelected = selectedCount === this.list.length
}
}

結尾

此項目沒有比較難的點,都是照著官方文檔,查閱API做出來的,依靠著聲明式UI的簡潔和強大,頁面搭建效率很高。

項目地址:https://gitee.com/liangdidi/BuyWhatDemo。

每天進步一點點、需要付出努力億點點。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2017-06-08 09:53:52

免密支付移動智能終端網絡安全

2016-08-18 23:37:24

2013-01-09 13:58:00

銀行移動電商移動互聯網

2017-11-17 08:58:00

2015-07-22 10:54:23

電商平臺源碼

2021-10-22 19:21:33

華為云

2013-09-18 16:12:35

2015-06-17 12:34:16

360“碼上買”

2021-02-25 10:00:19

企業安全互聯網云平臺安全

2025-09-10 07:36:05

2023-01-31 09:29:42

2025-01-02 13:07:24

2015-07-28 11:29:59

電商亞馬遜沃爾瑪

2013-01-09 10:31:57

移動電商2013前瞻

2012-02-17 09:18:49

電商iPad下架

2012-10-26 15:11:56

云計算Puppet

2022-06-15 23:35:04

元宇宙電商Web3.0

2025-10-28 02:11:00

2016-12-30 11:03:33

GrubMarket
點贊
收藏

51CTO技術棧公眾號

欧美少妇bbb| 成人性生交大片免费看中文网站| 中文字幕亚洲一区| 视频免费1区二区三区| 亚洲制服国产| 91麻豆精品在线观看| 国产男人精品视频| 久久久久香蕉视频| 国产成人精品免费视| 欧美美女一区二区三区| 国产精品久久中文字幕| 91大神在线网站| 粉嫩aⅴ一区二区三区四区| 欧美诱惑福利视频| 动漫性做爰视频| 加勒比久久高清| 欧美精品欧美精品系列| 人妻有码中文字幕| 2020国产在线视频| 亚洲国产精品二十页| 国产视频精品网| 国产又黄又粗又硬| 视频一区二区国产| 性欧美在线看片a免费观看| 日本激情视频一区二区三区| 人体久久天天| 精品区一区二区| 潘金莲激情呻吟欲求不满视频| 韩国成人二区| 亚洲国产欧美在线人成| 日韩video| 3d成人动漫在线| 国产亚洲成aⅴ人片在线观看 | 亚洲精品自产拍| 色哟哟在线观看视频| 国产亚洲人成a在线v网站| 欧美日韩国产一区二区| 激情六月天婷婷| 毛片在线看片| 国产精品视频一二三区| 青青草原成人| 九九热视频在线观看| 成人高清av在线| 超碰97网站| www.成人免费视频| 国产一区二区三区国产| 成人国产精品一区二区| 日韩xxx视频| 日本欧美一区二区三区乱码| 欧美一区三区三区高中清蜜桃| 国产乡下妇女做爰视频| 影音先锋中文字幕一区| 欧美精品成人91久久久久久久| 麻豆成人在线视频| 欧美色图首页| 午夜精品久久久久久久99黑人| 国产精品不卡av| 亚洲看片一区| 日本aⅴ大伊香蕉精品视频| 西西44rtwww国产精品| 亚洲精品黄色| 欧洲成人性视频| 日韩精品成人免费观看视频| 久久青草久久| 国产精品视频久| 国产精品无码一区二区桃花视频| 麻豆成人久久精品二区三区小说| 国产精品一区电影| 国产乱人乱偷精品视频a人人澡| 精品一区二区久久| 5g国产欧美日韩视频| 精品人妻aV中文字幕乱码色欲| 国产成人鲁色资源国产91色综| 国产精品一区二区欧美黑人喷潮水| 色呦呦免费观看| 久久久影院官网| 国产福利视频在线播放| 麻豆tv在线观看| 99精品国产一区二区三区2021| 日韩美女在线视频| av漫画在线观看| 校园春色另类视频| 国产亚洲精品久久久久动| 久久午夜精品视频| 午夜天堂精品久久久久| 久久久久久久久久久免费精品 | 亚洲欧洲性图库| 日韩精品手机在线观看| 色戒汤唯在线观看| 欧美日韩性生活| 亚洲色图欧美日韩| 欧美日韩国产免费观看视频| 美日韩精品免费视频| 国产精品suv一区二区三区| 日韩精品91亚洲二区在线观看| 91老司机精品视频| 亚洲欧美日韩免费| 亚洲欧洲av在线| 免费在线a视频| 99re8精品视频在线观看| 欧美大片免费久久精品三p| 中文字幕在线1| 欧美日韩精品一本二本三本| 日产精品99久久久久久| 99热这里精品| 欧美激情综合在线| 高清欧美精品xxxxx| 欧美电影在线观看网站| 亚洲第一av网| 欧美丰满熟妇bbbbbb| 六月丁香综合| 国产精品免费观看高清| 婷婷在线视频| 91久久奴性调教| 四虎精品一区二区| 国产精品久久久久9999赢消| 欧美亚洲在线播放| 亚洲欧美另类综合| 亚洲三级在线观看| 黑森林精品导航| 神马午夜久久| 97国产在线视频| 国产国语亲子伦亲子| 国产精品欧美一区二区三区| 久热免费在线观看| 久久aimee| 高清视频欧美一级| 国产福利免费视频| 亚洲欧洲另类国产综合| av网站在线不卡| 国产亚洲电影| 人人爽久久涩噜噜噜网站| 亚洲 美腿 欧美 偷拍| 一区二区三区中文字幕| 性鲍视频在线观看| 围产精品久久久久久久| 国产精品久久999| 噜噜噜在线观看播放视频| 精品久久久久久久中文字幕| 成人三级做爰av| 女人天堂亚洲aⅴ在线观看| 国产精品午夜视频| av福利精品| 欧美午夜免费电影| 亚洲一区 欧美| 日韩不卡一区二区三区| 午夜欧美性电影| 性国裸体高清亚洲| 亚洲男人天堂手机在线| 91玉足脚交嫩脚丫在线播放| 久久久久成人黄色影片| 日韩手机在线观看视频| 少妇精品久久久一区二区三区| 欧美最近摘花xxxx摘花| 日本a一级在线免费播放| 欧美日韩国产丝袜美女| 欧美大波大乳巨大乳| 日韩成人免费电影| 91手机视频在线| 香蕉大人久久国产成人av| 色综合天天狠天天透天天伊人| 性生活视频软件| 亚洲国产另类精品专区| 深爱五月激情网| 日韩精品午夜视频| 亚洲巨乳在线观看| 精品国产一级| 欧美激情免费看| 日本中文字幕电影在线观看| 日本高清成人免费播放| 欧洲性xxxx| 国产麻豆视频一区二区| 97在线国产视频| 久久av免费| 成人a视频在线观看| 欧美人与牲禽动交com | 国产精品视频久久久| 日本在线播放| 精品国产网站在线观看| 91video| 国产精品久久久久久久久久免费看| 亚洲色图欧美自拍| 亚洲精品三级| 亚洲一二三区精品| 超碰在线成人| 国产不卡在线观看| 羞羞网站在线看| 亚洲欧美日韩精品| 国产免费久久久| 狠狠躁夜夜躁人人躁婷婷91 | 韩国精品一区二区三区| 久久精品一二三区| 57pao成人永久免费| 91极品女神在线| 黄视频网站在线| 日韩激情片免费| 国产精品久久久久久久免费看| 香蕉久久一区二区不卡无毒影院 | 国模吧视频一区| 日本婷婷久久久久久久久一区二区| 日韩美香港a一级毛片| 97视频免费看| 操你啦在线视频| 一本色道久久88综合日韩精品| 亚洲高清在线观看视频| 欧美性猛片aaaaaaa做受| 日本天堂在线视频| 国产精品国模大尺度视频| 青青草成人免费视频| 国产乱码精品一区二区三| 国产免费人做人爱午夜视频| 国内自拍视频一区二区三区| 午夜精品一区二区三区四区| 亚洲第一二三区| 国产高清不卡av| 成人日韩视频| 国产欧美在线视频| 91精品影视| 欧美在线视频网| 波多野结衣中文在线| 日韩中文字幕国产| 高清av电影在线观看| 亚洲精品美女免费| 亚洲卡一卡二卡三| 日韩一区二区在线免费观看| 亚洲无码精品国产| 欧美影院午夜播放| 日本一区二区免费电影| 精品久久久精品| 日韩欧美亚洲国产| 亚洲一区二区在线视频| 久热这里有精品| 亚洲视频一二区| 亚洲一级二级片| 国产精品三级电影| av网站免费在线看| 国产人伦精品一区二区| 李宗瑞91在线正在播放| 97精品国产97久久久久久久久久久久 | 欧美一级片在线视频| 国产欧美一区二区三区在线老狼 | 亚洲视频精选在线| 日本女人性生活视频| 中文字幕不卡在线播放| 夜夜春很很躁夜夜躁| 久久精品夜色噜噜亚洲a∨| 国产精品高清无码在线观看| 久久久一区二区三区捆绑**| 国产一级久久久久毛片精品| 久久久99精品免费观看不卡| 国产成人福利在线| 国产精品无圣光一区二区| 亚洲激情图片网| 日韩毛片在线免费观看| 加勒比婷婷色综合久久| 亚洲综合一区二区| 日韩精品一区二区av| 黑人巨大精品欧美一区二区一视频| 欧美 日韩 精品| 色久综合一二码| 一级黄在线观看| 91精品国产免费| 欧美熟妇另类久久久久久不卡| 亚洲国产精品久久精品怡红院| 亚洲欧美色视频| 中文字幕亚洲欧美日韩2019| 国产福利视频在线观看| 久久久久久久久久久网站| 国产理论在线| 国产精品久久久久久久午夜| 中文幕av一区二区三区佐山爱| 97se国产在线视频| 国产无遮挡裸体免费久久| 欧美一区二区三区在线播放| 91欧美日韩| 97免费视频观看| 爽好久久久欧美精品| 中文字幕亚洲影院| 成人的网站免费观看| 最近中文字幕在线mv视频在线| 中文字幕亚洲不卡| 国产一国产二国产三| 在线欧美日韩国产| 国产成人精品av在线观| 亚洲精品在线不卡| 精精国产xxxx视频在线| 97涩涩爰在线观看亚洲| 午夜精品久久久久久毛片| 国产乱子伦精品| 日韩欧美午夜| 日韩欧美一区三区| 精品一区二区三区不卡| 久久午夜夜伦鲁鲁片| 国产精品高潮呻吟| 日本系列第一页| 欧美男生操女生| 青青久草在线| 欧美老少做受xxxx高潮| 电影亚洲精品噜噜在线观看| 高清一区二区三区视频| 日本欧美肥老太交大片| 国产二区视频在线| 久久国产精品99精品国产| 第四色在线视频| 亚洲欧美一区二区不卡| 成人免费视频国产免费| 精品电影一区二区三区| 午夜小视频在线| 欧美最顶级的aⅴ艳星| 99re8这里有精品热视频8在线| 亚州欧美一区三区三区在线| 9色国产精品| 奇米777在线视频| 国产农村妇女毛片精品久久麻豆 | av片在线观看永久免费| 国产精品999999| 久久资源综合| 国产一区二区三区在线免费| 久久福利资源站| 四虎国产精品成人免费入口| 亚洲18色成人| www.成人免费视频| 另类色图亚洲色图| 九九热这里有精品| 日韩美女一区| 日韩精品欧美精品| 天天躁日日躁aaaa视频| 午夜电影一区二区| 蜜桃视频久久一区免费观看入口| 久久成人综合视频| 欧美极品在线| 久草视频免费在线播放| avtt综合网| 亚洲三区在线观看| 日韩中文字幕1| 性色av蜜臀av色欲av| 亚洲午夜羞羞片| www.日韩高清| 欧美成人一区二区三区电影| 日韩精品第二页| 一区二区精品在线| 美国一区二区三区在线播放 | 日韩在线视频一区| 国产成+人+综合+亚洲欧美| 青青草原成人| 日本欧美一区二区三区| 林心如三级全黄裸体| 欧美日韩一二三| 日本视频在线播放| 91情侣偷在线精品国产| 欧美a级在线| 中文字幕人妻一区| 午夜精品久久久| 青青草手机在线| 国产精品久久精品| 久久婷婷蜜乳一本欲蜜臀| 中文字幕亚洲影院| 艳妇臀荡乳欲伦亚洲一区| 黄色av中文字幕| 69精品小视频| 欧美手机在线| 毛片毛片毛片毛片毛| 亚洲国产欧美一区二区三区丁香婷| 国 产 黄 色 大 片| 午夜欧美不卡精品aaaaa| 蜜桃一区二区| 粉色视频免费看| 亚洲黄色片在线观看| 天堂在线观看视频| 国产精品精品久久久久久| 99re66热这里只有精品8| gogo亚洲国模私拍人体| 岛国av在线不卡| 成a人v在线播放| 亚洲一区二区在线播放| 亚洲乱亚洲高清| 中文字幕成人动漫| 91精品国产综合久久蜜臀| 99热99re6国产在线播放| 欧美二级三级| 激情五月婷婷综合| 日韩 国产 在线| 国产一区二区三区18| 精品视频一二| 免费观看精品视频| 综合网在线视频| 亚洲aaa在线观看| 国产在线拍揄自揄视频不卡99| 国产精品a久久久久| 88久久精品无码一区二区毛片| 欧美日韩亚洲综合在线| а√天堂中文在线资源8| 在线观看一区二区三区三州| 成人av网址在线| 一级黄色片在线| 日本一区二区三区四区视频| 欧美ab在线视频| 九一在线免费观看| 国产视频精品久久久| 老司机午夜精品视频|