簡體   English   中英

如何防止在Safari移動瀏覽器上捏縮放(滾動)?

[英]How to prevent pinch to zoom (on scroll) on safari mobile browser?

我需要我的Web應用程序充當本地移動應用程序。 為此,我需要防止在所有瀏覽器上進行捏縮放和雙擊縮放。 在Chrome和Firefox中,這很容易:

<meta name="viewport" content="width=device-width, user-scalable=no" />

在Safari上,這是一個挑戰。 在這里,我找到了如何防止捏縮放和禁用雙擊縮放。 但是,當您滾動並捏以縮放時,它就會縮放。 我的問題是是否還有辦法在滾動時阻止它?

與您的鏈接中的javascript preventDefault解決方案結合使用; 您可以使用以下內容在整個頁面上禁用放大和縮小。

<style>
html,
body {
  position: fixed;
  overflow: hidden;
}
</style>

並使用以下CSS將所有內容包裝在主包裝器的<body>

<style>
.mainwrapper {
  width: 100vw;
  height: 100vh;
  overflow-y: scroll;
  -webkit-overflow-scrolling: touch;
}
</style>

<body>
    <div id="master_wrap">
        ...content...
    </div> <!-- /master wrapper -->
</body>

實際上,您禁用了所有body / html級別的滾動,然后重新啟用了在主包裝內下方的級別的滾動,其中包括彈性和動量滾動。 當這些元素滾動時,捏合已被忽略。

缺點

1-如果您具有fixedabsolute元素,則滾動將變得非常混亂。

2-似乎還有一個奇怪的錯誤,如果您從頁面的高處向下滾動,則頁面的一部分將被修改,並且夾點再次變為可用。 我認為這可能與vh屬性有關,並且可能有一個JS解決方案可以更好地設置元素的高度/寬度。

如果要忽略所有可以滾動正文內容的事件,可以將函數綁定到touchmove事件,以防止默認行為並停止事件的傳播:

document.body.addEventListener("touchmove", function(event) {
    event.preventDefault();
    event.stopPropagation();
}, false);

在jQuery或類似的庫中:

$(document.body).on("touchmove", function(event) {
    event.preventDefault();
    event.stopPropagation();
});

鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM