我正在制作一個網絡瀏覽器游戲,我發現在Safari iOS中雙擊會彈出這個放大鏡功能:
我想禁用它,但找不到方法。我試過user-select: none(其實是-WebKit-user-select:Safari的none)、touch-action: none和各種各樣的event.preventDefault()。
有一些主題涉及如何長按隱藏它(這里是-webkit-user-select: none works),還有一些主題涉及如何禁用雙擊縮放,但我還沒有找到一種方法來隱藏這個雙擊手勢的放大鏡。
這能做到嗎?
如果你的游戲是嵌入的WkWebView,在你的web視圖配置中有一個屬性可以禁用交互式文本。這將關閉通過放大鏡選擇、雙頂和拖動來放大文本的功能。但是,它也改變了所有文本交互的行為。所以,也許最好謹慎使用。
let config = WKWebViewConfiguration()
let view = WKWebView(frame: .zero, configuration: config)
view.configuration.preferences.isTextInteractionEnabled = false
如果它是一個可通過Mobile Safari訪問的網站,那么您可以通過touchend和touchcancel事件攔截特定元素的事件傳播。但是,這也可能有其他意想不到的影響,基本上是事件不會冒泡到它們的父級進行單擊,或者事件鏈不會完成,就像相同元素的click事件一樣。
const eventParams = { passive: false };
document.body.addEventListener('touchcancel', ignore, eventParams);
document.body.addEventListener('touchend', ignore, eventParams);
function ignore(e) {
e.preventDefault();
}
我還沒有找到一種只在CSS中禁用它的方法。
我如何為Safari解決這個問題的示例:
main();
canvas.addEventListener("touchend", e => game(e));
canvas.addEventListener("touchstart", e => game(e));
canvas.addEventListener("touchmove", e => game(e));
document.body.addEventListener('touchstart', (e) => e.preventDefault(), { passive: false });
您通常只需添加這行代碼:
document.body.addEventListener('touchstart', (e) => e.preventDefault(), { passive: false });
哦,如果你在函數游戲(e)中添加e.preventDefault()的話(或者其他對你來說)對我不起作用