前端筆記知識點整合之移動端&響應式(下)預設樣式&事件&慣性拋擲&swiper&loaction對象

来源:https://www.cnblogs.com/rope/archive/2019/04/12/10696357.html
-Advertisement-
Play Games

一、移動端預設樣式 ·IOS和Android下觸摸元素時出現半透明灰色遮罩 ·IOS按鈕圓角的問題 ·上下拉動滾動條時卡頓、慢 ·禁止複製、選中文本 ·旋轉屏幕時,字體大小調整的問題 二、移動端事件 2.1 基本使用 PC端事件仍然可以在移動端使用不過會存在一些問題,一會我們來闡述。 那麼移動端也有 ...


一、移動端預設樣式

·IOSAndroid下觸摸元素時出現半透明灰色遮罩

a,input,button{
    -webkit-tap-highlight-color: transparent;
}

 

·IOS按鈕圓角的問題 

button,input{
    border-radius: 0;
    -webkit-appearance: none;
}

 

·上下拉動滾動條時卡頓、慢 

body {
    -webkit-overflow-scrolling: touch;
    overflow-scrolling: touch;
}

 

·禁止複製、選中文本 

*{
    -webkit-user-select: none;
    -moz-user-select: none;
    -khtml-user-select: none;
     user-select: none;
}

 

·旋轉屏幕時,字體大小調整的問題

html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {
    -webkit-text-size-adjust:100%;
}

二、移動端事件

2.1 基本使用

PC端事件仍然可以在移動端使用不過會存在一些問題,一會我們來闡述。

那麼移動端也有移動端專有的事件。

 

touchstart當用戶手指觸摸到的觸摸屏的時候觸發。事件對象的 target 就是touch 發生位置的那個元素。

touchmove當用戶在觸摸屏上移動觸點(手指)的時候,觸發這個事件。一定是先要觸發touchstart事件,再有可能觸發 touchmove 事件。

touchend當用戶的手指抬起的時候,會觸發 touchend 事件。如何用戶的手指從觸屏設備的邊緣移出了觸屏設備,也會觸發 touchend 事件。

touchcancel一般用於保存現場數據。比如:正在玩游戲,如果發生了 touchcancel 事件,則應該把游戲當前狀態相關的一些數據保存起來。

 

基本語法:

<div></div>
<script type="text/javascript">
    var oDiv = document.getElementsByTagName("div")[0];
    //DOM0級事件-時好時壞
    oDiv.ontouchend = function(){
        this.innerText += "手抬起"
    }

    //DOM2級事件
    //oDiv.addEventListener(事件名稱(不加on),事件處理函數,是否捕獲)
            
    oDiv.addEventListener("touchstart",function(){
        this.innerHTML += "DOM2級<br/>"
    },false)
</script>

2.2 事件對象

當給某個元素加上了事件綁定函數之後,事件函數預設的第一個參數就是事件對象。

事件對象:當用戶在瀏覽器下觸發了某個行為,事件對象會記錄用戶操作時一些細節信息。

 

註意:touchstarttouchmove事件中的event事件對象中有一個屬性是touches是數組,裡面封裝了每個手指的信息,包括手指的位置、手指的粗細、手指力度(iPhone6s以上提供),都有以下截圖數據:

 

web頁面基本上都是1個手指,和app不一樣。web頁面一般沒有捏合、旋轉操作。都是一根手指。

 event.touches[0]

 

1 touches         表示當前跟蹤的觸摸操作的touch對象的數組

2 targetTouches   特定於事件目標的touch對象數組

3 changeTouches   表示自上次觸摸以來發生了什麼改變的touch對象數組

touchend事件比較特殊,離開的時候能獲取到最終的信息。

touches屬性是一個數組,它表示是現在仍然在屏幕上的手指

changedTouches屬性也數組,表示離開的手指信息,離開時會被push進入數組,並且保留最終的信息。


2.3touch對象詳解之位置尺寸

每個touch對象包含的屬性如下:

1 clientX:觸摸目標在視口中的x坐標。

2 clientY:觸摸目標在視口中的y坐標。

3 pageX:觸摸目標在頁面中的x坐標。

4 pageY:觸摸目標在頁面中的y坐標。

5 screenX:觸摸目標在屏幕中的x坐標。

6 screenY:觸摸目標在屏幕中的y坐標。

7 target:觸目的DOM節點目標。

8 identifier:標識觸摸的唯一ID。

 


2.4事件點透

2.4.1現象

移動端的點透:當上層元素髮生點擊的時候,下層元素也有點擊(焦點)特性,在300ms之後,如果上層元素消失或者隱藏,目標點就會“漂移”到下層元素身上,就會觸發點擊行為。

<a href="http://baidu.com">百度一下</a>
<p>pc點擊事件</p>
<div></div>
        
<script type="text/javascript">
    //pc端事件是可以在移動端使用的  但是存在一些問題(事件點透)-pc端事件比移動端事件慢300ms
    var oDiv = document.getElementsByTagName("div")[0];
    var oP = document.getElementsByTagName("p")[0];
            
    oP.onclick = function(){
        this.style.color = "orange";
    }

    oDiv.addEventListener("touchend",function(){
        this.style.display = "none";
    },true);
</script>

 如果我們在百度一下 pc點擊事件上方進行點擊會發現當紅色區域隱藏後還會觸發其自身的事件。

這種現象就是事件點透。


2.4.2 成因

我們上面說過,移動設備能夠響應click事件,不過比較慢,這是為什麼?

因為click事件觸發之後,要等200ms300ms左右,因為瀏覽器有一些預設的手指快捷操作,比如:快速雙擊兩次屏幕視口會放大,彈出輔助菜單等等。

大家用手機上網的時候,尤其看一些PC端網站,雙擊屏幕,當前視口就變大了。

 

本質上:PC端事件比移動端的事件略慢,大概是在300ms左右。所以我們也稱這種現象為300毫秒延遲。


2.4.3解決方案

下層不再使用具有點擊特性的元素,獲取取消具有點擊特性元素的屬性,並且使用移動端事件。

 

比如我們看移動端淘寶,他在導航區域就沒有使用a標簽而是全部使用div

因為淘寶不再擔心優化問題,而我們做網站時是特別看重優化問題的,所以我們不能全部使用div,那麼我們的解決方案是:把a標簽的href屬性去掉,用一個自定義的屬性來存儲url,並且通過js進行事件觸發動態跳轉頁面。

 

代碼如下:

<nav>
    <ul>
        <li><a data-href="http://baidu.com">百度</a></li>
        <li><a data-href="http://163.com">163</a></li>
        <li><a data-href="http://qq.com">騰訊</a></li>
    </ul>
<nav>
<script type="text/javascript">
    var aS = document.querySelectorAll("a");
        
    for(var i=0;i<aS.length;i++){
        aS[i].addEventListener("touchstart",function(){
            //頁面跳轉-window.location.href
            //把被點擊的a的自定義屬性拿過來 然後複製就好
            window.location.href = this.getAttribute("data-href");                    
        },true)
    }
</script>

三、慣性拋擲

拖拽後根本停不下來,有慣性,會慢慢停下來,有兩種方法:

方法一: overflow:auto 很智能的把移動的內容就變成可以滑動、拋擲貨慣性的了;

 

觸摸的時候有顏色的變化:(iPhoneiPad)

-webkit-tap-highlight-color:#00FF3E;

nav{ 
width:100%;height:50px;padding:20px 0;
background:#FF6969;overflow:hidden; overflow-x:auto; 
}
nav ul{width:99999px; }
nav ul li{float:left;margin-right:10px;line-height:50px; }
<nav>
    <ul>
        <li>欄目欄目1</li>
        <li>欄目欄目2</li>
        <li>欄目欄目3</li>
        ...
    </ul>
</nav>

方法二: swiper

<!DOCTYPE html>
<html lang="zh">

    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
        <link rel="stylesheet" type="text/css" href="css/swiper.css"/>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
                list-style: none;
            }
            nav{
                background-image: linear-gradient(to right,#fff,deepskyblue,#fff);
            }
            li{
                height: 40px;
                line-height: 40px;
                text-align: center;
            }
        </style>
    </head>

    <body>
        <nav class="swiper-container">
            <ul class="swiper-wrapper">
                <li class="swiper-slide">首頁</li>
                <li class="swiper-slide">國內</li>
                <li class="swiper-slide">國際</li>
                <li class="swiper-slide">軍事</li>
                <li class="swiper-slide">財經</li>
                <li class="swiper-slide">娛樂</li>
                <li class="swiper-slide">體育</li>
                <li class="swiper-slide">互聯網</li>
                <li class="swiper-slide">科技</li>
                <li class="swiper-slide">游戲</li>
                <li class="swiper-slide">個性推薦</li>
                <li class="swiper-slide">女人</li>
                <li class="swiper-slide">汽車</li>
                <li class="swiper-slide">房產</li>
            </ul>
            <div class="swiper-scrollbar"></div>
        </nav>
        
        <script src="js/swiper.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            new Swiper(".swiper-container",{
                //具體的配置項
                slidesPerView: 5,
                scrollbar: {
                    el: '.swiper-scrollbar',
                    dragSize: 50
                },
            })
        </script>
    </body>

</html>

四、swiper

官網:http://www.swiper.com.cn/

開源(開放源碼)=>代碼健壯性

免費

佈局可以自己寫亦可以仿照他們的

使用:

1.首先載入插件,需要用到的文件有swiper.min.js和swiper.min.css文件。可下載Swiper文件或使用CDN。

<!DOCTYPE html>
<html>
<head>
    ...
    <link rel="stylesheet" href="path/to/swiper.min.css">
</head>
<body>
    ...
    <script src="path/to/swiper.min.js"></script>
</body>
</html>

 

2.HTML內容。

<div class="swiper-container">
    <!--輪播圖-->
    <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
    </div>
    <!-- 下麵的點點點 -->
    <div class="swiper-pagination"></div>
    
    <!-- 左右按鈕 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
    
    <!-- 如果需要滾動條 -->
    <div class="swiper-scrollbar"></div>
</div>
導航等組件可以放在container之外

 

3.初始化Swiper:最好是挨著</body>標簽

<script>        
    var mySwiper = new Swiper ('.swiper-container/選擇器', {
    direction: 'vertical',/*水平or垂直*/
    loop: true,/*無縫輪播*/
    
    // 如果需要分頁器
    pagination: {
      el: '.swiper-pagination',
    },
    
    // 如果需要前進後退按鈕
    navigation: {
      nextEl: '.swiper-button-next',
      prevEl: '.swiper-button-prev',
    },
    
    // 如果需要滾動條
    scrollbar: {
      el: '.swiper-scrollbar',
    },
  })        
</script>          

五、BOMhashsearch

5.1 認識location對象

hash#後面的我們稱之為hash

Host:主機

Hostname:主機名

Href:地址

Port:埠號

Search?後面的我們稱之為search|他會刷新網頁


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在需要把一個input輸入框內的字母自動轉變為大寫。 查了下資料,目前收集到的方法有兩種:使用JavaScript,在input標簽添加onkeyup方法,將字元轉為大寫。使用CSS,給input設置樣式。區別:使用JavaScript會給用戶一種轉換感,使用CSS是把輸入的字母顯示為大寫。所以從... ...
  • 函數防抖(debounce):在事件被觸發n秒後再執行回調,如果在這n秒內又被觸發,則重新計時。 看一個🌰(慄子): 看一下運行結果: 可以看到,我們只要按下鍵盤,就會觸發這次ajax請求。不僅從資源上來說是很浪費的行為,而且實際應用中,用戶也是輸出完整的字元後,才會請求。下麵我們優化一下: 看一 ...
  • HTML頁面中顯示HTML標簽代碼,可以使用<xmp>html標簽內容</xmp>,這樣,在網頁中就會顯示html標簽 ...
  • on監聽事件,off取消事件 ,trigger觸發事件,once只執行一次 測試腳本 或者可以使用上一章節的內容進行測試https://www.cnblogs.com/yinping/p/10697083.html 在function函數添加監聽函數 同時在move,start中添加觸發函數 ...
  • 實現思路: 滑鼠按下開始拖拽 記錄摁下滑鼠時的滑鼠位置以及元素位置 拖動滑鼠記下當前滑鼠的位置 滑鼠當前位置-摁下時滑鼠位置= 滑鼠移動距離 元素位置= 滑鼠移動距離+滑鼠摁下時元素的位置 class Drag { //構造函數 constructor(el) { this.el = el; //鼠 ...
  • 以下內容部分轉載自菜鳥教程 CSS層疊樣式表(Cascading Style Sheets) 內聯: 內嵌: 外部樣式文件: rel 屬性,規定當前文檔與被鏈接文檔/資源之間的關係。 優先順序: 內聯>內嵌>外部樣式文件 CSS選擇器 元素選擇器 類選擇器 ID選擇器 設置全局樣式 body{ ... ...
  • 一.pexels 提供大量高清尺寸,品質優良的攝影圖片,所有圖片都可以免費商用。網址:www.pexels.com 最好的免費圖片在一個叫pexels的地方,Pexels是使用的高質量照片庫的平臺。Pexels可以幫助設計師,博主和所有正在尋找圖像的人們找到可以在任何地方免費使用的精美照片。這意味著 ...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-e ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...