正在苦逼的實習中,昨天公司讓做一個頁面,涉及到檢測終端的問題,如果是手機設備,就跳轉到指定的網頁上,以前寫響應式布局只要用@media screen來實現布局的差異化適應,但是現在不僅僅是布局,還要針對移動端做一些別的動作,所以看了點資料,做個總結
方法一、還是用@media screen
思路:css使用媒體查詢,當屏幕小于760px時,使某個元素的樣式發生改變,然后通過js檢測到這個改變,就可以知道現在切換到移動端了
css代碼:
/* 檢測小屏幕- */ @media only screen and (max-width: 760px) { #some-element { display: none; } }
js代碼:
$( document ).ready(function() { var isMobile = false;//默認是pc端 if( $("#some-element").css("display")=="none") { is_mobile = true; } if (isMobile == true) { //對移動端進行處理 } });
方法二、通過navigator.userAgent字符串檢測
思路:Navigator對象包含有關瀏覽器的信息,通過檢測userAgent字符串,然后使用正則表達式進行匹配,我們自然就能知道用戶是否在使用移動端的瀏覽器啦
先上個簡化版的,意思意思下
var isMobile = false; // 檢測userAgent if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { isMobile = true; } if(isMobile){ //移動端的處理邏輯 } 其實還可以用jQuery,but jQuery 從 1.9 版開始,移除了 $.browser 和 $.browser.version: $.browser.device = (/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase()));
通過上面那段代碼基本就能檢測到我們能常用的移動終端了,但是后來我在stackoverflow發現一哥們檢測得更加全面牛逼:
var isMobile = false;//默認PC端 // 檢測userAgent if(/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(navigator.userAgent.substr(0,4))) { isMobile = true; } if(isMobile){
//移動端的處理邏輯
} 方法三、通過Window.matchMedia()檢測 思路:Window.matchMedia()用來檢查mediaquery語句,扔個MDN的傳送門。它返回一個MediaQueryList對象。該對象有兩個屬性 media:查詢語句的內容。 matches:如果查詢結果為真,值為true,否則為false
代碼實現如下:
var isMobile = false;//默認PC端
var result = window.matchMedia("only screen and
(max-width: 760px)");
if (result.matches){
isMobile = true;
}
如果在PC端上使用Window.matchMedia()的話IE10以下是不支持的,但是我們只是用來檢測終端哈,IE不支持就算了,移動端上安卓3.0以上都沒有問題,so~~
方法四、檢測移動端的TouchEvent事件
思路:使用document.createEvent()創建TouchEvent事件,如果成功那就是移動端了,返回true,pc端是沒有TouchEvent事件的,所以會出錯,返回false
代碼實現:
var isMobile = false;//默認PC端 function mobile() { try{ document.createEvent("TouchEvent"); return true; } catch(e){ return false; } } isMobile=mobile(); 簡潔方便~~
方法五、使用Device.js庫
這個庫就沒啥好講的了,自己跟著套代碼就OK
github地址 https://github.com/matthewhud...
不想看英文的孩子,扔個中文教程 https://segmentfault.com/a/11...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105060.html
摘要:首先在里面需要引入移動端屬性布局方式之布局標題布局標題布局內容兼容端和移動端的布局獲取屏幕寬度設置標簽的大小為移動端效果圖端效果圖布局方式之彈性布局布局標題布局內容兼容端和移動端的 首先在head里面需要引入移動端屬性: 1.css布局方式之div + css布局; 標題: div + css布局 內容: 兼容...
摘要:首先在里面需要引入移動端屬性布局方式之布局標題布局標題布局內容兼容端和移動端的布局獲取屏幕寬度設置標簽的大小為移動端效果圖端效果圖布局方式之彈性布局布局標題布局內容兼容端和移動端的 首先在head里面需要引入移動端屬性: 1.css布局方式之div + css布局; 標題: div + css布局 內容: 兼容...
摘要:所以一個網,甚至是響應式設計,在兩個平臺上都會損害您整體的。三響應式與如果把網站作為一個單獨的網站,如果網站的內容與桌面版的內容相對缺少,導致用戶回到桌面端的網站,會記錄這種選擇,使搜索排名降低,國內百度就不知道會怎樣。 一、為什么需要響應式設計(responsible web design) 1. 響應式發展背景 1、屏幕尺寸的快速變化,iphone為320x480,分辨率在未來可以...
閱讀 2018·2021-09-29 09:35
閱讀 1952·2019-08-30 14:15
閱讀 2977·2019-08-30 10:56
閱讀 960·2019-08-29 16:59
閱讀 575·2019-08-29 14:04
閱讀 1306·2019-08-29 12:30
閱讀 1030·2019-08-28 18:19
閱讀 514·2019-08-26 11:51