JavaScript前端實(shí)現(xiàn)判斷登錄設(shè)備是移動端還是PC
原生 JS 判斷設(shè)備類型方法
可通過以下兩種主流方案實(shí)現(xiàn)設(shè)備類型檢測:
方案一:基于 navigator.userAgent 的 User Agent 檢測
實(shí)現(xiàn)代碼:
function isMobileDevice() {
const ua = navigator.userAgent || navigator.vendor || window.opera;
const mobileRegex = /android|iphone|ipad|ipod|blackberry|iemobile|opera mini|mobile|windows phone|phone|webos|kindle|tablet/i;
return mobileRegex.test(ua.toLowerCase());
}
邏輯說明:
- 通過
navigator.userAgent獲取瀏覽器標(biāo)識字符串。 - 正則表達(dá)式匹配移動端關(guān)鍵詞(如
android、iphone、mobile等)。 - 返回
true表示移動端,false表示 PC 端。
?。?!接下來是方案二,方案二不太建議使用,因?yàn)槿郫B可能不止768
方案二:結(jié)合屏幕分辨率與 User Agent 檢測(增強(qiáng)版)
實(shí)現(xiàn)代碼:
function detectDeviceType() {
const ua = navigator.userAgent.toLowerCase();
const isMobileUA = /mobile|android|iphone|ipad|ipod|windows phone|phone|webos/i.test(ua);
const isSmallScreen = window.innerWidth <= 768;
return isMobileUA || isSmallScreen ? 'mobile' : 'pc';
}
邏輯說明:
- 同時(shí)檢測 User Agent 和屏幕寬度(移動端通常小于等于 768px)。
- 雙條件驗(yàn)證減少誤判(如 iPad 可能被識別為 PC 端)。
注意事項(xiàng)
User Agent 的局限性:部分瀏覽器可能偽造 UA(如 Chrome 移動端模擬 PC 模式)。
平板設(shè)備處理:若需區(qū)分平板與手機(jī),需額外增加關(guān)鍵詞(如 ipad、tablet)。
動態(tài)響應(yīng)式場景:建議結(jié)合 CSS 媒體查詢實(shí)現(xiàn)布局適配,而非僅依賴 JS 檢測。
代碼調(diào)用示例
if (isMobileDevice()) {
console.log("當(dāng)前設(shè)備為手機(jī)/平板");
} else {
console.log("當(dāng)前設(shè)備為 PC");
}
1. 基于 navigator.userAgent 的插件方案
推薦插件:mobile-detect.js、platform.js實(shí)現(xiàn)邏輯:
- 插件通過解析
navigator.userAgent中的設(shè)備標(biāo)識符(如Android、iPhone、Windows等)實(shí)現(xiàn)設(shè)備判斷。 - 支持更細(xì)分的設(shè)備類型檢測(如平板、手機(jī)、PC)。
代碼示例(以 mobile-detect.js 為例) :
// 引入插件
import MobileDetect from 'mobile-detect';
// 初始化檢測器
const md = new MobileDetect(navigator.userAgent);
// 判斷設(shè)備類型
if (md.mobile()) {
console.log("移動端登錄設(shè)備(手機(jī)/平板)");
} else if (md.tablet()) {
console.log("平板設(shè)備");
} else {
console.log("PC 端設(shè)備");
}
2. 結(jié)合屏幕分辨率的增強(qiáng)方案
推薦插件:react-device-detect(適用于 React 項(xiàng)目)
實(shí)現(xiàn)邏輯:
- 通過
User Agent和屏幕寬度綜合判斷設(shè)備類型,減少誤判。 - 支持動態(tài)響應(yīng)式場景(如橫豎屏切換)。
代碼示例:
import { isMobile } from 'react-device-detect';
if (isMobile) {
console.log("移動端登錄設(shè)備");
} else {
console.log("PC 端登錄設(shè)備");
}
注意事項(xiàng)
User Agent 的局限性:
- 瀏覽器可能偽造 UA(如 Chrome 的“桌面模式”模擬 PC 端)。
- 建議結(jié)合后端設(shè)備指紋(如 IP、設(shè)備型號)增強(qiáng)準(zhǔn)確性。
平板設(shè)備的特殊處理:
- 部分平板(如 iPad)可能被識別為 PC 端,需額外判斷
navigator.platform(如MacIntel表示 iPad)。
- 部分平板(如 iPad)可能被識別為 PC 端,需額外判斷
動態(tài)設(shè)備切換場景:
- 監(jiān)聽
window.resize事件,更新設(shè)備狀態(tài)(如橫豎屏切換導(dǎo)致屏幕寬度變化)。
- 監(jiān)聽
推薦插件對比
| 插件 | 適用場景 | 優(yōu)點(diǎn) |
|---|---|---|
| mobile-detect.js | 需要細(xì)分設(shè)備類型(手機(jī)/平板) | 支持 5000+ 設(shè)備類型識別 |
| react-device-detect | React 項(xiàng)目 | 集成簡單,支持響應(yīng)式設(shè)計(jì) |
| platform.js | 輕量級檢測(僅區(qū)分 PC/移動端) | 體積?。?lt; 5KB) |
到此這篇關(guān)于JavaScript前端實(shí)現(xiàn)判斷登錄設(shè)備是移動端還是PC的文章就介紹到這了,更多相關(guān)JavaScript判斷設(shè)備類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript獲取當(dāng)前鼠標(biāo)坐標(biāo)的方法
這篇文章主要介紹了javascript獲取當(dāng)前鼠標(biāo)坐標(biāo)的方法,可針對不同瀏覽器獲取鼠標(biāo)的坐標(biāo)位置,是非常實(shí)用技巧,需要的朋友可以參考下2015-01-01
JavaScript中entries()和Object.values()方法的使用
本文詳細(xì)介紹了JavaScript中的兩個(gè)實(shí)用方法,entries()和Object.values(),下面就來介紹一下兩個(gè)方法在遍歷對象和數(shù)組時(shí)的應(yīng)用,感興趣的可以了解一下2024-12-12
跟我學(xué)習(xí)javascript的執(zhí)行上下文
跟我學(xué)習(xí)javascript的執(zhí)行上下文,讀完本文后,你應(yīng)該清楚了解釋器做了什么,為什么函數(shù)和變量能在聲明前使用以及它們的值是如何決定的,需要了解這些內(nèi)容的朋友可以參考下2015-11-11
JavaScript使用replace函數(shù)替換字符串的方法
這篇文章主要介紹了JavaScript使用replace函數(shù)替換字符串的方法,涉及javascript中replace函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
JS實(shí)現(xiàn)Tab欄切換的兩種方式案例詳解
這篇文章主要介紹了JS實(shí)現(xiàn)Tab欄切換的兩種方式,一種是面向過程的寫法,一種是面向?qū)ο蟮膶懛ǎ疚慕o大家分享詳細(xì)案例代碼,需要的朋友可以參考下2022-08-08
微信小程序全局變量GLOBALDATA的定義和調(diào)用過程解析
這篇文章主要介紹了微信小程序全局變量GLOBALDATA的定義和調(diào)用過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript位移運(yùn)算符(無符號) >>> 三個(gè)大于號 的使用方法詳解
這篇文章主要介紹了JavaScript位移運(yùn)算符(無符號) >>> 三個(gè)大于號 的使用方法詳解的相關(guān)資料,需要的朋友可以參考下2016-03-03
前端JavaScript路徑別名跳轉(zhuǎn)和提示失效的解決方案
本文將深入剖析造成前端路徑別名無法跳轉(zhuǎn)、提示的根源,并結(jié)合實(shí)際經(jīng)驗(yàn),提供從 配置文件方案 到 插件工具方案 的多種解決思路,最后還會分享在開發(fā)庫時(shí)如何正確配置類型提示,幫助你告別路徑別名失效的困擾,需要的朋友可以參考下2025-09-09

