手機網(wǎng)站源代碼seo網(wǎng)站內部優(yōu)化方案
創(chuàng)建項目
vue組件庫 — vant-ui(常用于移動端)
Vant 2 - 輕量、可靠的移動端組件庫
安裝vant
npm i vant@latest-v2 -S
引入組件
按需導入和全部導入
全部導入
整個組件庫的所有組件都導進來,缺點是增加了代碼包體積
main.js
import Vue from 'vue'import Vant from 'vant'
import 'vant/lib/index.css'//插件安裝初始化:內部會將vant所有組件進行導入注冊
Vue.use(Vant)
自動按需導入
安裝插件:npm i babel-plugin-import -D ?
-D:僅在開發(fā)過程中使用
--force 會無視沖突,并強制下載npm庫資源,當有資源沖突時覆蓋掉原先的版本
--legacy-peer-deps-告訴npm忽略項目中引入的 各個modules之間的相同modules 但不同版本的問題 并繼續(xù)安裝,保證各個引入的依賴之間對自身所使用的不同版本modules共存
babel.config.js中配置
main.js
測試使用
效果展示:
問題:按需導入的配置會很長
解決:抽離,專門封裝到utils文件夾下的js文件里
項目中的vw適配
postcss 插件實現(xiàn)px到vw的自動轉換
- 安裝插件
yarn add postcss-px-to-viewport@1.1.1 -D
- 根目錄新建postcss.config.js文件,填入配置
module.exports = {plugins: {'postcss-px-to-viewport': {//vw 適配的標準屏的寬度viewportWidth: 375}}
}
比如設計圖拿的是750;2倍圖調成1倍圖375 => 適配375標準屏幕
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?640? ? ? ? ? ? ? ? ? ? ? ? ? ? ?320?=> 適配320標準屏幕;viewportWidth就要改成320
路由設計配置
怎么區(qū)分一級路由和二級路由:單個頁面,獨立展示的是一級路由;帶導航的,里面嵌的是二級路由
配置所有的一級路由
配置二級路由?
先實現(xiàn)底部的tabber
- 在vant-ui.js中按需引入
- layout.vue粘貼官方代碼
- 改文字
- 改圖標
- 改顏色
?效果展示:
基于底部導航,完成二級路由的配置
- 配置二級路由規(guī)則
- 配置導航鏈接
- 配置路由出口
一個小問題:網(wǎng)頁默認訪問 / ;我們給 / 添加一個重定向,重定向到home
效果展示:
登錄頁靜態(tài)布局
頭部的樣式定制
按需導入
使用
通用樣式覆蓋 —— 所有頁面左箭頭變成灰黑色
上面那種寫法等價于
或者改成
選擇器權重問題
在 CSS 里面,如果有多個選擇器作用在同一元素上面,那么會按照優(yōu)先級順序進行樣式的選取;優(yōu)先級越高,瀏覽器最終就顯示哪種樣式
舉例說明:
下方靜態(tài)結構
login/index.vue
<template><div class="login"><!-- 頭部 - vant當中的NavBar導航欄組件 --><!-- left-arrow 左箭頭 @click-left="$router.go(-1)" 返回上一頁 --><van-nav-bar title="會員登錄" left-arrow @click-left="$router.go(-1)" /><!-- 主體 --><div class="container"><div class="title"><h3>手機號登錄</h3><p>未注冊的手機號登錄后將自動注冊</p></div><div class="form"><div class="form-item"><input class="inp" maxlength="11" placeholder="請輸入手機號碼" type="text"></div><div class="form-item"><input class="inp" maxlength="5" placeholder="請輸入圖形驗證碼" type="text"><img src="@/assets/code.png" alt=""></div><div class="form-item"><input class="inp" placeholder="請輸入短信驗證碼" type="text"><button>獲取驗證碼</button></div></div><div class="login-btn">登錄</div></div></div>
</template><script>
export default {name: 'LoginPage'
}
</script><style lang="less" scoped>
.container {padding: 49px 29px;.title {margin-bottom: 20px;h3 {font-size: 26px;font-weight: normal;}p {// 網(wǎng)頁中每行文字之間的距離line-height: 40px;font-size: 14px;color: #b8b8b8;}}.form-item {border-bottom: 1px solid #f3f1f2;padding: 8px;margin-bottom: 14px;display: flex;align-items: center;.inp {display: block;border: none;outline: none;height: 32px;font-size: 14px;flex: 1;}img {width: 94px;height: 31px;}button {height: 31px;border: none;font-size: 13px;color: #cea26a;background-color: transparent;padding-right: 9px;}}.login-btn {width: 100%;height: 42px;margin-top: 39px;background: linear-gradient(90deg,#ecb53c,#ff9211);color: #fff;border-radius: 39px;box-shadow: 0 10px 20px 0 rgba(0,0,0,.1);letter-spacing: 2px;display: flex;justify-content: center;align-items: center;}
}
</style>
效果展示:
request模塊 — axios封裝
目標:將axios請求方法,封裝到request模塊
接口文檔:wiki - 智慧商城-實戰(zhàn)項目
以獲取圖形驗證碼為例
- 安裝axios
yarn add axios
- 新建request模塊
utils/request.js
- 創(chuàng)建axios實例
Axios 實例 | Axios中文文檔 | Axios中文網(wǎng)
- 配置導出實例
配置
什么是攔截器
在發(fā)請求和獲取服務器響應數(shù)據(jù)的過程中,可以設置攔截器將請求或響應的數(shù)據(jù)流攔截下來,做相關操作以后再放行,有請求攔截器和響應攔截器兩種
導出
- 測試?

圖片驗證碼功能
目標:基于請求回來的base64圖片,實現(xiàn)圖形驗證碼功能
將來在獲取短信驗證碼的時候會用到 用戶輸入的圖形驗證碼 和 請求響應回來的圖形驗證碼key
需求:
- 動態(tài)將請求回來(響應返回的)的base64圖片,解析渲染出來
存在一個問題:每次刷新有一瞬間的圖片損壞
圖形驗證碼
?
因為一上來并沒有默認給圖片;改進:當picUrl有的時候才去加載圖片
圖形驗證碼改進
- 點擊驗證碼圖片盒子,要刷新驗證碼?
封裝圖片驗證碼接口
目標:將請求封裝成函數(shù),統(tǒng)一放到API模塊
好處:與頁面邏輯分離;相同的請求在不同頁面可以直接復用;請求進行了統(tǒng)一管理
步驟:
- 在api文件中新建一個與登錄相關的js請求模塊
- 封裝請求函數(shù)
- 頁面中導入調用
Toast 輕提示
Vant 2 - 輕量、可靠的移動端組件庫
使用場景:
在短信驗證之前要輸入手機號,那我們就要在短信驗證之前加個校驗,校驗通過才發(fā)請求 —— 請輸入正確的手機號
將來發(fā)送成功也要有個提示 —— 發(fā)送成功,請注意查收
步驟:
- 注冊安裝
- 兩種使用方式:
導入調用(組件內index.vue?或 非組件內main.js都可使用)
效果展示:
通過this直接調用(必須在組件內)
本質是將方法注冊掛載到了Vue原型上 Vue.prototype.$toast
擴展:
效果展示: