亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 web前端 css教程 我的農(nóng)場商店購物車項目

我的農(nóng)場商店購物車項目

Dec 18, 2024 am 07:27 AM

我剛剛使用 HTML、CSS 和 vanilla JavaScript 創(chuàng)建了一個前端購物車 Web 應(yīng)用程序。因為我喜歡在當?shù)氐碾s貨店購買蔬菜,所以我的想法是基于一家名為芬利農(nóng)場商店的農(nóng)場商店的想法。

要點擊該項目,實時鏈接是:https://gabrielrowan.github.io/Finleys-Farm-Shop-FE/

My shopping cart project for a Farm Shop

使用此應(yīng)用程序,您可以:

?將商店商品添加到購物車
?更改商店商品的數(shù)量
?在手推車模式上查看購物車中的所有商品
?查看購物車中所有商品的總價
?查看購物車中的商品數(shù)量
?即使您刷新頁面或關(guān)閉選項卡然后重新打開它,仍將所有商品保留在購物車中

該項目的背景

到目前為止,我在工作中主要從事后端應(yīng)用程序的工作。不過,今年夏天,我開始從事一個全棧項目,包括設(shè)計和實現(xiàn)前端。我真的很喜歡它,它讓我想更多地發(fā)展我的前端技能。

我想挑戰(zhàn)自己在不使用 CSS 庫的情況下完成這個項目,不是因為我認為使用它們不好,而是因為像 Bootstrap 這樣的東西通常是我前端的首選。

我之前從未在 JavaScript 中使用過瀏覽器本地存儲,因此我決定創(chuàng)建一個項目將是我實際了解它的最佳方式。

我的項目目標

當我第一次開始這個項目時,我心中有幾個目標。這些是:

?響應(yīng)能力 - 我希望 UI 能夠適應(yīng)移動設(shè)備、ipad 和桌面視圖
?不使用 CSS 庫創(chuàng)建購物車模式
?熟悉在 JavaScript 中使用本地存儲

未來目標

創(chuàng)建前端是我這個項目計劃的第 1 部分。第二部分是使用 Django 將其轉(zhuǎn)換為全棧應(yīng)用程序,以便商店商品來自數(shù)據(jù)庫,而不是硬編碼在 HTML 中。

使其響應(yīng)式

網(wǎng)格

為了使應(yīng)用程序適應(yīng)不同的屏幕尺寸,我使用了 Kevin Powell 視頻中的響應(yīng)式網(wǎng)格版本。

的 CSS包含我項目中的商店物品卡的是:
.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

神奇之處在于 grid-template-columns 值。它的本質(zhì)意思是:
在此父容器中容納盡可能多的列,最小尺寸為 12rem,最大尺寸為可用空間的 1 分之一。

使用此網(wǎng)格,當從更寬的桌面視圖到更窄的移動視圖時,列數(shù)(以商店商品卡的數(shù)量表示)可以動態(tài)地從 4 減少到 1,而無需編寫額外的媒體查詢。

My shopping cart project for a Farm Shop

橫幅字體大小

對于橫幅標題“Finley's Farm Shop”,我使用了clamp(),以便字體大小能夠自動縮放。如果不這樣做,我發(fā)現(xiàn)適用于桌面的字體大小對于移動設(shè)備來說太大了。

.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

這意味著字體大小的目標是 5vw(視口寬度 - 又稱為總可見屏幕寬度的 5%)。

字體大小的最小值為 3.8rem,因此如果 5vw 等于小于 3.8rem,則字體大小將為 3.8rem。

字體大小的最大值可以設(shè)置為 5.6rem,因此如果 5vw 相當于大于 5.6rem,則字體大小將為 5.6rem。

有多種方法可以精確計算最小和最大字體大小之間的漸變,并使用它來選擇您喜歡的中間值,但我使用檢查器來觀察它?

這里有一篇關(guān)于計算精確漸變的 CSS 技巧文章。

創(chuàng)建模態(tài)

不同的屏幕尺寸

對于手推車,我想要一個會從桌面屏幕右側(cè)出現(xiàn)的模式:

My shopping cart project for a Farm Shop

在移動視圖上,我決定它應(yīng)該占據(jù)全屏尺寸:

My shopping cart project for a Farm Shop

購物車項目網(wǎng)格區(qū)域

當購物車項目被添加到購物車時,我的大部分時間都花在了 CSS 上。我使用網(wǎng)格模板區(qū)域,以便購物車項目的不同部分(項目標題,即“Apple”、價格、項目數(shù)量和圖像)占用我為它們計劃的分配空間。

My shopping cart project for a Farm Shop

.banner-title {
    font-size: clamp(3.8rem, 5vw, 5.6rem);
}

JavaScript

對于模態(tài) JavaScript,我的目標是:

  • 單擊購物車圖標時隱藏模式
  • 單擊關(guān)閉圖標時關(guān)閉模式
  • 禁用頁面滾動,以便在模式打開時無法向下滾動商店商品的主頁

為了實現(xiàn)這一點,我向兩個圖標添加了事件監(jiān)聽器,調(diào)用了函數(shù)toggleModal。如果尚未將其添加到模態(tài)元素中,則會添加一個名為 .active 的類;如果已存在,則將其刪除。

在CSS中,我將模態(tài)框設(shè)置為默認隱藏,并將.active類設(shè)置為顯示它。

設(shè)置CSS:

.shop-items {
    display: grid;
    gap: 0.6rem;
    grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
}

切換類以顯示/隱藏模式:

.banner-title {
    font-size: clamp(3.8rem, 5vw, 5.6rem);
}

這意味著關(guān)閉圖標和購物車圖標上的事件偵聽器可以重用相同的功能,因為如果尚未顯示,它將顯示模態(tài),如果已經(jīng)打開,它將隱藏它。

使用本地存儲

對于本地存儲,我發(fā)現(xiàn) Web Dev Simplified 的視頻“JavaScript Cookies vs. Local Storage vs. Session Storage”特別有幫助。它討論了這三種存儲數(shù)據(jù)方式之間的差異、如何在開發(fā)工具的“應(yīng)用程序”選項卡中查看數(shù)據(jù)以及如何為每種數(shù)據(jù)存儲類型添加和刪除項目。

這是我將 2 件商品添加到購物車后項目的“應(yīng)用程序”選項卡的樣子:

My shopping cart project for a Farm Shop

關(guān)注點分離

我決定將與修改 DOM(添加元素、刪除元素、編輯元素)相關(guān)的函數(shù)與與本地存儲相關(guān)的函數(shù)分開。例如,我有一個函數(shù)removeCartItemFromLocalStorage,它的功能與上面所說的一樣,并且與removeCartItemFromModalDOM不同,它從模態(tài)中刪除商店項目html。

.cart-item {
    display: grid;
    grid-template-areas: "image description description"
        "image price quantity";
    grid-template-columns: min-content 1fr 1fr;
    grid-template-rows: 2.5rem 3.5rem;
}

當商店商品從購物車中移除時,需要調(diào)用這兩個函數(shù),將它們作為單獨的函數(shù)可以幫助我檢查是否已完成該過程的兩個所需部分。如果不從 DOM 中刪除 html,網(wǎng)頁將不會直觀地反映出該商品已從購物車中刪除。如果不從本地存儲中刪除該項目,刷新頁面或關(guān)閉選項卡時更改將無法保留。

遇到問題

當我在研究 JavaScript 中的本地存儲功能時,我遇到了一個讓我非常困惑的問題。到目前為止我完成的步驟是:

  • 在初始頁面加載時將本地存儲設(shè)置為空數(shù)組
  • 當點擊商店商品上的“添加”按鈕時,將調(diào)用以下函數(shù):
    • 項目已添加到本地存儲
    • 購物車商品的 HTML 已添加到手推車模式
  • 獲取總價,即本地存儲陣列中每個商品的數(shù)量*價格
  • 將價格元素的innerText設(shè)置為從本地存儲檢索的價格

我點擊了一下,看起來也很棒! ...直到我刷新頁面。然后,價格設(shè)置為與之前相同的總價,但 DOM 已完全恢復(fù)為初始頁面加載時的樣子。從視覺上看,購物車中似乎沒有商品(顯示的是添加按鈕,而不是數(shù)量輸入控件),但總數(shù)超過 0 英鎊。

添加到購物車和未添加到購物車的商品之間的差異

My shopping cart project for a Farm Shop

這真的讓我很困惑,我花了一段時間才弄清楚。最終,我明白了。是的,我正在將這些項目添加到本地存儲中。但是,當重新加載頁面并觸發(fā) DOMContentLoaded 事件偵聽器時,我沒有根據(jù)本地存儲中的內(nèi)容渲染 DOM。事實上,現(xiàn)階段我根本沒有檢查本地存儲中的內(nèi)容。

意識到這一點后,我創(chuàng)建了一個名為 DOMContentLoaded 的函數(shù),該函數(shù)循環(huán)遍歷本地存儲中的產(chǎn)品數(shù)組中的所有產(chǎn)品,找到每個產(chǎn)品的 id,然后更新相關(guān)產(chǎn)品的 html 元素以顯示已添加的產(chǎn)品到購物車。

該函數(shù)的簡化版本是:

const loadCartState = () =>;
{
    const cart = JSON.parse(localStorage.getItem("cart"));
    如果(!購物車)
    {
        購物車=[];
        localStorage.setItem("購物車", JSON.stringify(cart));
    }

    cart.forEach(產(chǎn)品 =>
    {
         const shopItem = document.querySelector(`.shop-item[data- 
        >



<h2>
  
  
  部署
</h2>

<p>我使用 Github Pages 部署了這個應(yīng)用程序。我之前沒有使用它進行部署,但發(fā)現(xiàn)該過程非常簡單。我遇到的唯一問題是起初沒有顯示任何圖像。我意識到這是因為區(qū)分大小寫:我的圖像文件夾名為 Img 但圖像路徑是 html 中的 img/ 。修復(fù)此問題并清除緩存后,網(wǎng)站按預(yù)期顯示。 </p>

<h2>
  
  
  結(jié)論
</h2>

<p>我從這個項目中學(xué)到了很多東西,特別是關(guān)于 CSS 網(wǎng)格和通過 JavaScript 使用本地存儲。我很想添加更多頁面并將其變成一個完整的前端電子商務(wù)應(yīng)用程序,但我決定暫時保留它的 MVP,以便我可以專注于下一階段將其變成 Django 應(yīng)用程序并掛鉤它到數(shù)據(jù)庫?</p>


          

以上是我的農(nóng)場商店購物車項目的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實現(xiàn)簡單動畫;2.使用多個點的自定義旋轉(zhuǎn)器,通過不同延遲時間實現(xiàn)跳動效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強調(diào)了設(shè)計細節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動畫表現(xiàn)不同;2.查閱CanIuse確認特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動添加前綴;5.安裝PostCSS并配置browserslist指定目標瀏覽器;6.構(gòu)建時自動處理兼容性;7.老項目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗,尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風格協(xié)調(diào),避免突兀;4.移動端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標識。

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動端;3.易于動畫化,可結(jié)合hover或JavaScript實現(xiàn)動態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

什么是CSS,它代表什么? 什么是CSS,它代表什么? Jul 03, 2025 am 01:48 AM

CSS,orcascadingstylesheets,isthepartofwevelvermentThatControlsawebpage’svisualAppearance,包括colors,fonts,fonts,spacing,and spacing and layout

CSS繪畫API是什么? CSS繪畫API是什么? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdemimageGenerationinCsssingJavascript.1.developersCreateApaintWorkletClassWithaPaint()method.2.theyregisteritviaregisterpaint()。3.thecustompAntFunctionSthenusitySthenusedisthenusedisthenusedIncerspropertieslikeBacknockforg-image-image.thisallows.thisallowsforderforderynamecvis

See all articles