主頁 > 前端設計 > Vue專案—Supermall移動端購物商城

Vue專案—Supermall移動端購物商城

2021-09-02 08:21:39 前端設計

目錄

一、專案描述

1.1 如何運行

1.2 專案演示?

二、專案頁面及功能

三、專案技術堆疊

四、準備作業

4.1 利用腳手架3創建專案開發環境,并劃分目錄結構;

4.2 css檔案的引入:base.css normalize.css

4.3 專案的模塊劃分:tabbar -> 路由映射關系

4.4 小圖示的修改

4.5 創建vue.config.js檔案,給專案目錄起別名,便于開發

五、功能點代碼梳理

5.0 總體框架

5.1 首頁開發

5.1.1 首頁導航欄的封裝與使用

5.1.2 請求首頁多個資料

5.1.3 Swiper輪播圖組件展示

5.1.4 推薦資訊展示

5.1.5 FeatureView的封裝

5.1.6 首頁商品資料的請求

5.1.8 首頁商品資料的展示

5.1.9 TabControl組件封裝與切換商品

5.1.10 對滾動進行重構- BScroll的封裝和使用

5.1.11 回到頂部- Backtop組件的封裝和使用

5.1.12 BackTop的顯示和隱藏

5.1.13 上拉加載更多

5.1.13 Home離開時記錄狀態和位置

5.2 詳情頁開發

5.2.1 詳情頁資料獲取并展示

5.2.2 頂部標題Detailnavbar實作

5.2.3 頂部標題與頁面內容的聯動效果

5.2.4 底部工具列的封裝

5.2.5 詳情頁回傳頂部

5.2.6 點擊加入購物車

5.2.7 封裝工具函式utils.js進行時間格式化

5.3 購物車頁面

5.3.1 購物車串列展示

5.3.2 購物車標題匯總數量生成

5.3.3 購物車底部封裝和應用

5.3.4 toast插件的封裝與使用

六、專案總結

6.1 Bug解決

6.2 做了那些優化?

6.3 Vuex的應用體現?

6.4 哪些地方用了組件通信?父子和非父子組件間怎么通信?

6.5 專案難點在那幾個地方?

6.6 待完善的點有那些?




一、專案描述

基于Vue全家桶構建的移動端購物商城,頁面共分為:首頁,詳情頁,分類頁,購物車頁面和個人資訊頁

gitee地址:https://gitee.com/mgslsdt/supermall

1.1 如何運行

# 克隆
git clone https://gitee.com/mgslsdt/supermall.git
# 打開專案目錄
cd supermall
# 安裝依賴
npm install
# 開啟本地服務運行專案
npm run serve

1.2 專案演示

在這里插入圖片描述

二、專案頁面及功能

Home商城首頁:

  • NavBar利用具名插槽實作三欄布局
  • 利用axios進行服務端通訊獲取介面資料
  • Swiper輪播圖組件
  • TabControl 控制商品串列展示
  • TabControl 標簽吸頂
  • backTop利用scrollTo回傳頂部
  • 封裝第三方庫better-scroll,處理商品串列滾動
  • 利用mixin混入添加防抖函式debounce

商品詳情頁:

  • 根據id獲取商品資料保存并展示
  • 封裝工具函式utils.js進行時間格式化
  • 實作標題和內容的聯動效果,既點擊標題滾動到對應的主題內容(反之亦可)
  • 封裝Toast彈窗插件

購物車頁面:

  • CheckButton商品全選按鈕
  • Vuex對購物車進行狀態管理(總計金額與商品相關聯,購物車總數與去計算資料更新
  • Vue.js組件復用

三、專案技術堆疊

Vue.js + Vue Router + Vuex + axios

Vue CLI3快速搭建Vue開發環境以及對應的webpack配置;

Vue-router完成頁面的跳轉及部分資料的傳遞;

Vuex完成多個頁面之間的狀態管理

axios請求頁面所需要的資料

四、準備作業

4.1 利用腳手架3創建專案開發環境,并劃分目錄結構;

4.2 css檔案的引入:base.css normalize.css

4.3 專案的模塊劃分:tabbar -> 路由映射關系

<template>
  <div id="app">
    <keep-alive exclude="Detail">
      <router-view></router-view>
    </keep-alive>
    <main-tab-bar></main-tab-bar>
  </div>
</template>

4.4 小圖示的修改

4.5 創建vue.config.js檔案,給專案目錄起別名,便于開發

五、功能點代碼梳理

5.0 總體框架

tabbar+路由組件映射

main-tab-bar=>tab-bar=>tab-bar-item依次呼叫組件

  • 路由組件對應

效果

5.1 首頁開發

開發原則:保證首頁邏輯簡單清晰,有必要封裝組件

5.1.1 首頁導航欄的封裝與使用

封裝公共navbar組件,利用具名插槽實作組件復用(home,deatil,cart)

<template>
<div class="nav-bar">
  <div class="left"><slot name="left"></slot></div>
  <div class="center"><slot name="center"></slot></div>
  <div class="right"><slot name="right"></slot></div>
</div>
</template>

<script>
export default {
  name: "NavBar"
}
</script>

<style scoped>
.nav-bar {
  display: flex;
  height: 44px;
  line-height: 44px;
  text-align: center;
  color: #fff;
  box-shadow: 0 1px 1px rgba(100,100,100,.1);
}
  .left,.right{
  width: 60px;
  }
  .center{
    flex: 1;
  }
</style>

購物街使用center插槽

效果

5.1.2 請求首頁多個資料

  • 安裝axios
  • 創建axios實體
  • 發送網路請求

  • network新建home.js 回傳首頁資料請求

  • 拿到資料

  • vue結果驗證

5.1.3 Swiper輪播圖組件展示

  • 組件輪播圖的實作:SwiperSwiperItem
  • 輪播組件使用HomeSwiperDetailSwiper

  • home.vue中使用HomeSwiper組件,初始化banners,并傳入資料banners

效果

5.1.4 推薦資訊展示

  • homeComps下新建檔案 recommendView.vue

展示組件,并傳入從服務端獲取的資料

效果

5.1.5 FeatureView的封裝

  • childComps下新建檔案FeatureView.vue檔案
  • div>a>img

效果

5.1.6 首頁商品資料的請求

  • 先設計資料結構用于保存資料

  • 發送資料請求
  1. 在home.js中封裝getHomeGoods(type,page)

2. 在home.vue中,又在methods中getHomeGoods(type),通過呼叫this.getHomeGoods('pop')、this.getHomeGoods('new') 、this.getHomeGoods('sell'),

  • 動態獲取對應的page
  • 獲取到資料:res
  • this.goods[type].list.push(...res.data.list)
    this.goods[type].page += 1

結果:

goods:{

pop:page1/list[30]

new:page1/list[30]

sell:page1/list[30]

}

5.1.8 首頁商品資料的展示

  • 封裝Goodlist.vue組件
  • 封裝Goodlistitem.vue組件

5.1.9 TabControl組件封裝與切換商品

  • props->titles
  • div->根據titles v-for遍歷div->span{{title}}
  • css相關
  • 選中哪一個tab,哪一個tab文字顏色變色,下面border-bottom
  • 借助currentindex

對tab-control組件進行點擊監控,要把所點擊index傳入到父組件home.vue,在home中根據index切換商品型別

5.1.10 對滾動進行重構- BScroll的封裝和使用

原生scroll卡頓,且無法回彈,故使用封裝后的bscroll,絲滑可回彈,content必須要有高度

  • 對better-scroll進行封裝:Scroll.vue
  • Home.vue和Scroll.vue之間進行通信
  • Home.vue將probeType設定為3
  • Scroll.vue需要通過$emit,實時將事件發送到home.vue

  • 中間content高度計算方法

5.1.11 回到頂部- Backtop組件的封裝和使用

  • 如何監聽組件的點擊?直接監聽不可以,必須添加.native修飾符

  • 點擊回到頂部 this.$refs.scroll.scrollTo(0,0,500)

5.1.12 BackTop的顯示和隱藏

  • isShowBackTop : false
  • 監聽滾動,拿到滾動的位置
  • 通過v-show決定標識是否被顯示

5.1.13 上拉加載更多

pullUpLoad默認值是false

此處,pullUpLoad并沒有給死,首頁傳遞true,pullUpLoad就是true

5.1.14 tab-control的吸頂效果

思路:必須要知道向上滾動多少時,開始有吸頂效果=>獲取到tabControl的offsetTop

踩坑:組件沒有offsetTop,但所有組件都有一個屬性$el:用于獲取組件中的元素

直接在mounted中獲取tabControl的offsetTop(console.log(this.$refs.tabControl.$el.offsetTop)這里獲取不夠準確,可能圖片還沒有加載完,故等輪播圖加載完再獲取

監聽HomeSwiper中img的加載完成

加載完成后,發出事件,在home.vue中,獲取正確的值

補充:為了不讓HomeSwiper多次發出事件,可以使用isLoad的變數進行狀態的記錄

原本思路是讓tabControl向上移動到一定程度,設定fixed固定定位,

但在動態改變tabControl的樣式時,會出現兩個問題

1.下面商品會突然上移(因為fixed脫標)

2.tabControl雖然設定了fixed但也跟著better-scroll一起上移

故采用在nav-bar底下多復制一份PlaceHolderTabControl組件物件,利用它來實作停留效果,

當用戶滾動到一定位置,PlaceHolderTabControl顯示

當用戶滾動沒有達到一定位置,PlaceHolderTabControl隱藏

這里要注意兩個tabControl點擊index還沒有保持一致

措施:區分兩個ref 在tabClick修改對應的currentIndex

此時,吸頂效果完成

5.1.13 Home離開時記錄狀態和位置

讓Home不要隨意銷毀掉

  • 每次離開home,資料都會被銷毀 無法保存

措施:加keep-alive 但再次回傳home頁面 之前瀏覽位置記憶被消除,是bscroll的原因

措施:

  • 每次離開home前保留y值,
  • 再回到home時讓頁面滾動到之前的y值
  • 為防止無法拖動,再次進行重繪

5.2 詳情頁開發

5.2.1 詳情頁資料獲取并展示

  • 新建Detail檔案并配置路由關系
  • GoodsListItem點擊事件
  • 點擊之后獲取商品IID,跳轉詳情頁,并傳入iid
  • 根據id請求商品其余資料并展示
  • 推薦資料獲取并展示

詳情頁參考各個組件,具體各個組件見代碼

  • 在商品基本資訊展示板塊需要注意:當后端傳遞過來海量資料 資料獲取并不統一,而是來自3個不同的物件
  • 解決思路:把3個物件資料整合成一個物件資料(創建類-一個物件),傳給組件,讓組件面向這一個物件開發

5.2.2 頂部標題Detailnavbar實作

點擊標題,對應高亮顯示

5.2.3 頂部標題與頁面內容的聯動效果

  1. 點擊標題,頁面滾動到對應位置

themeTopYs[index] 里面的資料從哪里獲取是個問題

以下是在Deatail----created中

函式呼叫放在圖片加載完成后(等待圖片加載完后,值才是正確的)

但圖片加載后會出現多次回呼,為提高性能,采用防抖

滾動到對應主題:獲取所有主題的offsetTop

問題:哪里才能獲取到正確的offsetTop?

  • 1.created肯定不行,壓根不能獲取元素
  • 2.mounted也不行,資料還沒有獲取到
  • 3.獲取到資料的回呼中也不行,DOM還沒有渲染完
  • 4.$nextTick也不行(對應dom已經被渲染,但是圖片依然沒有加載完成),因為圖片的高度沒有被計算在內

最后,在圖片加載完后,獲取的高度才是正確

結果 在圖片加載完后實作一次回呼,同時可實作標題和頁面內容上下聯動

2、內容滾動,顯示正確的標題

5.2.4 底部工具列的封裝

5.2.5 詳情頁回傳頂部

仿照home回傳頂部,同樣的組件復制兩遍,因此可將兩個組件公共代碼進行抽取放在mixin中

公共組件引入detail和home

5.2.6 點擊加入購物車

保存需要存盤到購物車的資料,此處用到vuex進行狀態管理

1.獲取購物車需要展示的商品資訊

????

2.把商品添加到購物車--用到Vuex

利用vuex對狀態進行保管,可以實作購物車相關資料在多個界面進行共享

安裝vuex store中新建index.js

mutation需要進一步判斷

驗證結果:

  • mutations唯一目的就是修改state中狀態
  • mtations中每個方法盡可能完成事件單一一點
  • Vuex中,有異步操作和復雜邏輯的建議放在action中修改state,便于后期對mutions直接跟蹤和后期維護,

  • 結果雖然原本簡單的代碼可能會被修改的稍微復雜,但在復雜大專案中優勢比較明顯

  • 接下來需要對vuex進行重構

代碼修改

1.把mutation中內容轉移到actions中

2.之前mutation中一個方法判斷兩個情況,現在mutations中內容進行分情況處理(counter++,addtocart),在大專案中便于追蹤

分開前

分開后

當前,是把state,mutations,actions全放在一起,因此還可以進一步重構

actions

mutations

indexs重組后

綜上,重構體現在兩個地方

1.mutation中之前一個操作通過actions分成兩個操作,讓mutation保持每種方法只辦一件事

2.把index.js中state,mutations,actions進行分離,讓代碼看起來更簡潔

5.2.7 封裝工具函式utils.js進行時間格式化

5.3 購物車頁面

5.3.1 購物車串列展示

CartListItem=》CartList=》cart

5.3.2 單選按鈕CheckButton

  • 單選按鈕選中狀態判斷

5.3.2 購物車標題匯總數量生成

購物車標題數量來自于vuex中cartlist的長度

當多次呼叫時候,可進行computed計算屬性

進一步,可使用getter.js

同時引入新知識點

mapGetters以及兩種用法,方便了購物車匯總數量的引入

5.3.3 購物車底部封裝和應用

1.全選按鈕的實作:當購物車串列左側全部均選中時候

全選顯示狀態:判斷是否有一個不選中,全選就是不選中

點擊全選按鈕

  • 如果原來都是選中,點擊一次,全部不選中
  • 如果原來都是不選中(部分選中),全部選中

2. totalPrice計價

3. 去計算 : {{checkLength}}

5.3.4 toast插件的封裝與使用

toast普通封裝

toast插件封裝

采用普通方式封裝有時候存在一些壁壘

采用插件方式封裝,可直接呼叫插件的安裝函式 $toast.show()在頁面顯示即可, 方便多處呼叫,

原理:將toast封裝在插件中 ----安裝插件----組件創建開始就添加到body中---利用插件的安裝函式在頁面顯示

步驟1:自行新建toast組件

步驟2:index.js中新建obj物件

import Toast from "./Toast";
import Vue from "vue";

const obj = {}


export default obj

步驟3:main.js中安裝toast插件

import Vue from 'vue'
import App from './App.vue'

import toast from "components/common/toast" //匯入自己封裝的toast插件


// 安裝toast插件
Vue.use(toast);


new Vue({
  render: h => h(App),
  router,
  store,

}).$mount('#app')

步驟4:index.js中--安裝toast程序中成功添加到Vue原型上

import Toast from "./Toast";
import Vue from "vue";

const obj = {}

obj.install=function(vue){
  
//  1.創建組件構造器
  const toastConstructor = Vue.extend(Toast);
//  2.使用new創建一個組件實體物件
  const toast = new toastConstructor();
//  3.將這個實體物件掛載到某個div上
  toast.$mount(document.createElement('div'))
//  4.toast.$el對應的就是div
  document.body.appendChild(toast.$el)
//  5.將實體添加到Vue的prototype上
  Vue.prototype.$toast = toast;
};

export default obj

步驟5:toast插件使用show方法

<template>
<div class="toast" v-show="isShow">
  <div >{{message}}</div>
</div>
</template>

<script>
export default {
  name: "Toast",
  data() {
    return {
      isShow: false,
      message: ''
    }
  },
  methods:{
    show(message="默認值",duration = 1500){

      this.isShow = true;
      this.message = message;

      setTimeout(()=>{
        this.isShow = false
        this.message = " "
      },duration)
    }
  }
}

步驟6:addCart點擊中使用$toast中show方法顯示toast

點擊去計算也可以呼叫toast的show方法

疑惑:

.then來自于action中promise物件,有resolve出兩個不同文案,故,then中res就是他兩,

結果展示:

toast封裝-插件方式的封裝價值和意義在于封裝一次,可以在多處直接使用$toast.show('商品成功添加到購物車',2000)來顯示所需要的toast,

與傳統方式封裝相比,在多次參考組件時候,避免了頻繁的 引入組件-注冊組件-顯示組件-向子組件傳遞引數等多次流程

六、專案總結

6.1 Bug解決

以首頁可滾動區域的bug為例

  • 原因分析

  • 解決方案---引入事件總線

goodlistitem---this.$bus.$emit('aaa')

home---this.$bus.$on('aaa')

解決滑動區域時頻繁重繪,所以對refresh進行防抖操作

6.2 做了那些優化?

-----性能上優化:

1. 防抖

核心思想:每次事件觸發在延誤時間內,清除定時器,然后重新建立新定時器,直到不再觸發事件為止,

防抖應用1:首頁可滾動區域的refresh:利用better-scroll實作頁面滾動,better-scroll可滾動區域時根據其內容決定,初始內容圖片沒有完全加載,導致可滾動區域不準確(比較短),當圖片完全加載后,則可滾動區域和內容出現矛盾,導致滾動無法繼續,解決方案是監聽每一張圖片是否加載完成,只要有圖片加載完了就執行一次refresh,這樣則執行非常頻繁,因此所以這里對refresh進行防抖操作,將refresh函式傳入到dobounce函式中,生成新的函式,之后在呼叫頻繁的時候就執行新的函式,這個新的函式并不會頻繁的被呼叫,如果下一次請求來的非常快,那么會取消上一次定時器,重新定時,直到在一定時間內沒有新的請求執行refresh函式,

防抖應用2:詳情頁標題和滾動內容的聯動:既點擊標題頁面滾動到對應區域,這時候需要獲取每個組件的offsetTop,并進行push到一個陣列,在滾動時候,會列印出一系列offsetTop陣列,但是每個組件只需要一個offsetTop值,所以在這個地方進行防抖操作

2. 解決移動端300ms的延遲:FastClick的實作原理是在檢測到touchend事件的時候,會通過DOM自定義事件立即發出模擬的click事件,并把瀏覽器在300ms之后的click事件阻止掉,

3. 圖片懶加載

核心:用到時候再加載

針對某些圖片特別多的頁面,一下子全部加載就會很慢且可能會造成資源浪費,我們將頁面未出現在可視區域內的圖片先不做加載,等到滾動到可視區域在加載,這樣提高頁面加載性能,也提升了用戶體驗,

-----代碼優化

混入Mixin:相同的組件參考可進行mixin,減少組件的代碼

  • 在首頁、詳情頁和分類頁面使用BackTop組件,對其進行了混入
  • 因為在首頁、詳情頁和分類頁面都用到了Better-Scroll插件,在鉤子函式mounted中監聽圖片的加載,將此mounted函式進行了混入

6.3 Vuex的應用體現?

Vuex用于多界面狀態管理 商品詳情頁中點擊加入購物車按鈕,先定義一個陣列cartlist用于存放加入購物車商品的資訊,find() 來判斷當前加入陣列的商品是否已經添加到陣列中,之后commit兩個mutations來修改狀態,一個用于修改已經加入陣列中的商品的數目,另一個用于將新商品添加到陣列中, 購物車頁面顯示的商品以及結算的數量和總價格都是由陣列cartlist管理的,

6.4 哪些地方用了組件通信?父子和非父子組件間怎么通信?

父子組件通信

每一個頁面都對應著一個.vue檔案和childComps檔案,比如首頁對應的是home.vue,在這個檔案中通過封裝的axios組件向服務端請求所需要的的資料保存在home.vue中,子組件中需要的資料可以通過props來獲取,當子組件中有事件觸發的時候通過&emit向父組件發出事件,

非父子組件通信:

首頁中商品通過goodslist組件來展示,goodslist組件通過遍歷goodsitem組件得到,所以goodsitem組件和首頁主頁面是非父子的關系,非父子組件通信可通過事件總線來實作,當圖片加載完成時,goodsitem組件中this.$bus.$emit發出事件,home.vue 中this.$bus.$on來監聽事件并進行后續操作,當離開當前頁面,即在deactived中通過this.$bus.$off可以取消對圖片加載的監聽,

6.5 專案難點在那幾個地方?

主要就是代碼的組織、bug處理和復雜業務邏輯問題

  • 請求到的資料的保存(尤其是資料來自于不同的物件,需要構建類創建物件來保存)
  • 解決可滾動區域的問題(bug原因分析+事件總線引入)
  • 標題和內容的聯動效果(offsetTop獲取push到陣列后進行條件判斷)
  • 商品添加到購物車(用Vuex建立cartlist保存資料以及商品狀態更改)

6.6 待完善的點有那些?

頁面功能的完善:購物車界面直接實作商品數量增減;分類頁面功能完善

增加和服務端互動:增加登錄注冊

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/296893.html

標籤:其他

上一篇:Axios

下一篇:Vue.js框架基礎

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more