整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線(xiàn):

          "決勝移動(dòng)端:H5頁(yè)面如何一鍵禁用雙擊放大、雙指縮放與整體

          決勝移動(dòng)端:H5頁(yè)面如何一鍵禁用雙擊放大、雙指縮放與整體縮放功能】

          在移動(dòng)互聯(lián)網(wǎng)時(shí)代,H5頁(yè)面以其跨平臺(tái)兼容性和豐富的交互特性,成為眾多開(kāi)發(fā)者構(gòu)建移動(dòng)端應(yīng)用的首選。然而,在實(shí)際使用過(guò)程中,用戶(hù)可能會(huì)遇到雙擊放大、雙指縮放或整體縮放等操作帶來(lái)的困擾,尤其是在一些特定場(chǎng)景下(如游戲、閱讀、繪圖等),這些默認(rèn)的縮放行為可能會(huì)影響用戶(hù)體驗(yàn)。本文將深入解析如何通過(guò)CSS和JavaScript,一鍵禁用H5頁(yè)面的雙擊放大、雙指縮放及整體縮放功能,助您打造更為穩(wěn)定、流暢的移動(dòng)端交互體驗(yàn)。

          一、理解移動(dòng)端縮放機(jī)制

          1. 雙擊放大(Double Tap Zoom)

          雙擊放大是瀏覽器對(duì)移動(dòng)端設(shè)備的默認(rèn)響應(yīng)行為,當(dāng)用戶(hù)快速連續(xù)點(diǎn)擊屏幕兩次時(shí),瀏覽器會(huì)自動(dòng)將頁(yè)面內(nèi)容放大到一個(gè)預(yù)設(shè)的縮放比例,以便用戶(hù)查看細(xì)節(jié)。

          2. 雙指縮放(Pinch Zoom)

          雙指縮放是利用多點(diǎn)觸控技術(shù),通過(guò)兩個(gè)手指在屏幕上做開(kāi)合動(dòng)作來(lái)實(shí)現(xiàn)頁(yè)面內(nèi)容的放大或縮小。這是移動(dòng)設(shè)備上非常常見(jiàn)的交互方式,適用于查看圖片、地圖等需要精細(xì)操作的場(chǎng)景。

          3. 整體縮放(Meta Viewport Scaling)

          整體縮放主要由`<meta>`標(biāo)簽中的`viewport`屬性控制,它定義了瀏覽器在渲染網(wǎng)頁(yè)時(shí)應(yīng)如何調(diào)整其布局和縮放。例如,設(shè)置`initial-scale=1`意味著初始縮放比例為1:1,即網(wǎng)頁(yè)內(nèi)容與設(shè)備寬度保持一致。

          二、禁用雙擊放大

          1. 使用CSS屬性

          css
          body {
            touch-action: manipulation;
          }
          

          在CSS中,可以利用`touch-action`屬性來(lái)控制元素的觸摸交互行為。將其設(shè)置為`manipulation`,即可禁用雙擊放大:

          2. 通過(guò)JavaScript阻止事件冒泡

          javascript
          document.addEventListener('dblclick', function(event) {
            event.preventDefault();
          });
          

          對(duì)于更復(fù)雜的應(yīng)用場(chǎng)景,可能需要在JavaScript中處理雙擊事件,防止其觸發(fā)瀏覽器的默認(rèn)放大行為:

          三、禁用雙指縮放

          javascript
          let initialTouchStartY = 0;
          let initialTouchStartX = 0;
          
          document.addEventListener('touchstart', function(event) {
            if (event.touches.length > 1) {
              event.preventDefault(); // 阻止默認(rèn)行為,包括雙指縮放
              initialTouchStartY = event.touches[0].clientY;
              initialTouchStartX = event.touches[0].clientX;
            }
          });
          
          document.addEventListener('touchmove', function(event) {
            if (event.touches.length > 1) {
              event.preventDefault(); // 阻止默認(rèn)行為,包括雙指縮放
              const currentTouchY = event.touches[0].clientY;
              const currentTouchX = event.touches[0].clientX;
              const diffY = Math.abs(currentTouchY - initialTouchStartY);
              const diffX = Math.abs(currentTouchX - initialTouchStartX);
          
              // 如果雙指滑動(dòng)距離過(guò)小,可能是誤觸,允許正常滾動(dòng)
              if (diffY < 10 && diffX < 10) return;
          
              // 否則,阻止所有滾動(dòng)行為
              event.stopPropagation();
            }
          });
          
          document.addEventListener('touchend', function(event) {
            if (event.touches.length > 0) {
              event.preventDefault(); // 阻止默認(rèn)行為,包括雙指縮放
            }
          });
          

          要禁用雙指縮放,通常需要借助于JavaScript監(jiān)聽(tīng)`touchstart`、`touchmove`和`touchend`事件,并在`touchmove`事件處理器中阻止默認(rèn)行為:

          四、控制整體縮放

          1. 設(shè)置合理的viewport meta標(biāo)簽

          html
          <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
          

          在HTML文檔的`<head>`部分添加以下`<meta>`標(biāo)簽,確保頁(yè)面初始縮放比例為1,且禁止用戶(hù)手動(dòng)縮放:

          2. 使用CSS媒體查詢(xún)優(yōu)化布局

          css
          @media screen and (max-width: 768px) {
            /* 在小屏設(shè)備上的布局調(diào)整 */
          }
          
          @media screen and (orientation: landscape) {
            /* 橫屏模式下的布局調(diào)整 */
          }
          

          結(jié)合CSS媒體查詢(xún),根據(jù)不同的設(shè)備寬度和屏幕方向動(dòng)態(tài)調(diào)整布局,確保內(nèi)容在各種屏幕尺寸下都能良好展示,從而降低用戶(hù)主動(dòng)縮放的需求:

          五、實(shí)戰(zhàn)案例:禁用縮放功能的完整H5頁(yè)面示例

          html
          <!DOCTYPE html>
          <html lang="en">
          <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
            <style>
              body {
                touch-action: manipulation;
              }
            </style>
            <script>
              document.addEventListener('dblclick', function(event) {
                event.preventDefault();
              });
          
              let initialTouchStartY = 0;
              let initialTouchStartX = 0;
          
              document.addEventListener('touchstart', function(event) {
                if (event.touches.length > 1) {
                  event.preventDefault();
                  initialTouchStartY = event.touches[0].clientY;
                  initialTouchStartX = event.touches[0].clientX;
                }
              });
          
              document.addEventListener('touchmove', function(event) {
                if (event.touches.length > 1) {
                  event.preventDefault();
                  const currentTouchY = event.touches[0].clientY;
                  const currentTouchX = event.touches[0].clientX;
                  const diffY = Math.abs(currentTouchY - initialTouchStartY);
                  const diffX = Math.abs(currentTouchX - initialTouchStartX);
          
                  if (diffY < 10 && diffX < 10) return;
          
                  event.stopPropagation();
                }
              });
          
              document.addEventListener('touchend', function(event) {
                if (event.touches.length > 0) {
                  event.preventDefault();
                }
              });
            </script>
          </head>
          <body>
            <!-- 頁(yè)面內(nèi)容 -->
          </body>
          </html>
          

          為了便于理解和實(shí)踐,以下是一個(gè)包含了禁用雙擊放大、雙指縮放及整體縮放功能的完整H5頁(yè)面示例:

          六、結(jié)語(yǔ)

          通過(guò)以上步驟,您已經(jīng)掌握了在H5頁(yè)面中一鍵禁用雙擊放大、雙指縮放及整體縮放功能的方法。合理運(yùn)用這些技巧,不僅能提升移動(dòng)端用戶(hù)的瀏覽體驗(yàn),還能避免因不必要的縮放導(dǎo)致的布局錯(cuò)亂等問(wèn)題。在實(shí)際項(xiàng)目中,還需結(jié)合具體業(yè)務(wù)需求,靈活調(diào)整代碼實(shí)現(xiàn),以達(dá)到最佳效果。希望本文能為您的移動(dòng)端H5開(kāi)發(fā)之路提供有力支持,助您決勝移動(dòng)端!


          在響應(yīng)式布局逐漸成為主流的今天,網(wǎng)頁(yè)或者app的流式布局已經(jīng)不算是一個(gè)新鮮的詞匯了。今天我要講的一個(gè)內(nèi)容也是跟頁(yè)面流式布局有關(guān),如何讓你的網(wǎng)頁(yè)實(shí)現(xiàn)完美的縮放?

          網(wǎng)頁(yè)布局

          我們可以很快速的寫(xiě)出一個(gè)響應(yīng)式布局的頁(yè)面,首先看一下效果圖。

          網(wǎng)頁(yè)布局

          其中html部分的代碼如下:

          html部分代碼

          css中的item代碼為:

          css代碼

          通過(guò)以上代碼,完成上述的流式布局后,在我們改變?yōu)g覽器窗口大小時(shí),div也會(huì)隨之進(jìn)行縮放。

          問(wèn)題

          But,你以為這就是我們想要的結(jié)果嗎?

          當(dāng)然不是!在改變?yōu)g覽器窗口大小時(shí),我們發(fā)現(xiàn)雖然div的寬度是進(jìn)行了縮放,但是高度卻沒(méi)變,因此div的寬高比并未保持原始比例,我們可以看下以下的效果。

          縮放后寬高比

          從上圖中可以很容易看出,縮放后的div寬高比比之前小很多,這并不是我們想要的結(jié)果。

          我們需要達(dá)到的效果是在改變?yōu)g覽器窗口大小時(shí),div也會(huì)隨之進(jìn)行等比例的縮放。

          實(shí)現(xiàn)辦法

          首先,可以使用Javascript代碼去實(shí)現(xiàn),這是沒(méi)有問(wèn)題的。但是綁定Javascript的onresize事件,在拖拽時(shí)可能會(huì)出卡頓現(xiàn)象,體驗(yàn)不是很好。

          接下來(lái)我們通過(guò)CSS來(lái)實(shí)現(xiàn)以上的效果。

          使用的核心屬性是我們平時(shí)并不太注意的padding-bottom。

          padding-bottom有一個(gè)很容易讓人忽略的特性是,當(dāng)取值為百分比形式時(shí),其百分比的基數(shù)是父元素的寬度,而不是高度。

          因此我們可以在不用給父元素設(shè)置高度的時(shí)候,就可以通過(guò)padding-bottom屬性確定當(dāng)前元素的高度。我們的做法如下。

          1. 將元素的height屬性設(shè)為0,通過(guò)padding-bottom屬性確定元素高度。

          2. 設(shè)置合理的padding-bottom值,例如上述的例子中,在寬度為21%時(shí),如果需要高度是寬度的1.62倍,我們可以將padding-bottom取值為34%

          修改后的CSS代碼如下。

          修改后的CSS

          修改后,我們?cè)俅握{(diào)整瀏覽器窗口的大小,就會(huì)發(fā)現(xiàn)div是等比例的進(jìn)行縮放,完美達(dá)到了我們的要求。

          修改后等比例縮放

          疑問(wèn)

          在這里,可能會(huì)有人有疑問(wèn)如果設(shè)置overflow:hidden;那么里面的文字會(huì)不會(huì)因?yàn)槌^(guò)height,就會(huì)被隱藏了?

          答案是不會(huì)的,根據(jù)CSS2.1的規(guī)范,overflow只會(huì)對(duì)處于padding外面的內(nèi)容生效,即只有超出了 padding區(qū)域的內(nèi)容才會(huì)被overflow屬性隱藏掉。而在設(shè)置padding-bottom后,實(shí)際已經(jīng)決定了元素的height屬性,因此overflow:hidden;不會(huì)生效。

          總結(jié)

          今天這篇文章主要講解了利用CSS完成頁(yè)面等比例縮放的最簡(jiǎn)單方式,你學(xué)會(huì)了嗎?

          iewport:設(shè)備顯示網(wǎng)頁(yè)的那部分區(qū)域,在移動(dòng)端的開(kāi)發(fā)起著至關(guān)重要的作用。

          一、meta

          <meta name="viewport" content="width=device-width, initial-scale=1.0" />

          content的屬性值:

          • width:控制 viewport 的大小,width=device-width代表寬度是設(shè)備屏幕的寬度
          • initial-scale=1.0:表示初始的縮放比例
          • minimum-scale=1.0:表示最小的縮放比例
          • maximum-scale=2.0:表示最大的縮放比例
          • user-scalable=yes:表示用戶(hù)是否可以調(diào)整縮放比例

          首先,不建議禁用縮放,比如下面的寫(xiě)法:

          <meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

          這樣做會(huì)導(dǎo)致的問(wèn)題:

          1. 實(shí)現(xiàn)圖片預(yù)覽的時(shí)候,無(wú)法雙指滑動(dòng)進(jìn)行放大、縮小,在體驗(yàn)上超別扭;
          2. IOS端適配的問(wèn)題(DPI)(沒(méi)有IOS,因此沒(méi)測(cè)試,可能是最初的iphone屏幕才會(huì)出現(xiàn)適配的問(wèn)題吧)

          那么,應(yīng)該怎樣使用呢?一般來(lái)說(shuō),只設(shè)置允許最小的比例是1.0就足夠了,具體寫(xiě)法:

          <meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0" />
            //或
            <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.5" />

          二、CSS

          利用css的@viewport做適配,但真正做設(shè)備適配的代碼,不只用到這一個(gè)屬性。

          @viewport可以設(shè)置寬度、高度、縮放系數(shù)、文檔方向等,參考文檔:https://developer.mozilla.org/zh-CN/docs/Web/CSS/@viewport

          代碼兼容:

          @-webkit-viewport {
                  width: device-width;
           }
          @-moz-viewport {
                  width: device-width;
           }
          @-ms-viewport {
                  width: device-width;
          }
          @-o-viewport {
                  width: device-width;
           }
          @viewport {
                  width: device-width;
          }

          不過(guò),將設(shè)備的width設(shè)置為device-width,依然建議通過(guò)meta來(lái)實(shí)現(xiàn)。


          主站蜘蛛池模板: 91麻豆精品国产自产在线观看一区| 中文字幕一区二区三区四区| 日韩A无码AV一区二区三区| 中文字幕日韩一区| 免费播放一区二区三区| 无码一区18禁3D| 精品一区二区三区无码视频| 亚洲国产精品成人一区| 亚洲爆乳精品无码一区二区三区| 亚洲国产视频一区| 免费视频精品一区二区| 一本大道东京热无码一区 | 亚洲一区中文字幕在线电影网| 成人免费视频一区二区三区| 精品少妇一区二区三区在线 | 成人精品一区二区电影 | 在线欧美精品一区二区三区| 国产女人乱人伦精品一区二区| 内射女校花一区二区三区| 日本一区二区视频| 久久国产香蕉一区精品| 日日摸夜夜添一区| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久成人国产精品一区二区| 亚洲天堂一区在线| 精品国产免费一区二区三区| 亚洲日本久久一区二区va| 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲精品色播一区二区| 变态拳头交视频一区二区| 亚洲另类无码一区二区三区| 国产亚洲一区二区手机在线观看| 女同一区二区在线观看| 亚洲国产精品第一区二区| 无码人妻AⅤ一区二区三区水密桃| 日韩精品一区二区亚洲AV观看| 无码欧精品亚洲日韩一区夜夜嗨 | 亚洲一区爱区精品无码| 国产一区韩国女主播| 国产91大片精品一区在线观看 | 精品熟人妻一区二区三区四区不卡 |