【问题标题】:Detect pinch to zoom when 'user-scalable' is set to yes当“用户可缩放”设置为“是”时检测缩放以进行缩放
【发布时间】:2025-12-13 07:20:03
【问题描述】:

meta name="viewport" 设置为user-scalable=yes 时,如何检测缩放的缩放比例(或缩放距离)?

我已经在 Android 上进行了测试,但如果 meta name="viewport" 设置为 user-scalable=yes,则无法检测到缩放缩放。如果meta name="viewport" 设置为user-scalable=no,则可以检测到缩放缩放,但我无法放大文档。

这是我对 jsFiddle 的测试:

锤子.js: http://jsfiddle.net/pE42S/

var pziW = "test";
var viewport_width = $(window).innerWidth();
var zoom = 0;

var hammer = new Hammer(document.getElementById("touchme"));

hammer.ontransformstart = function(ev) {
    console.log("ontransformstart");
    console.log(ev);
    //pziW = $(window).innerWidth() / 2 * ev.scale;
    zoom = ev.scale;
    var msg = "ontransformstart " + pziW + " scale " + zoom;
    log(msg);
};
hammer.ontransform = function(ev) {
    console.log("ontransform");
    console.log(ev);
    zoom -= ev.scale;
    viewport_width+=viewport_width*zoom;
    zoom = ev.scale;
    pziW=viewport_width;
    //pziW = $(window).innerWidth() / 2 * ev.scale;
    jqUpdateSize();
    var msg = "ontransform " + pziW + " scale " + zoom;
    log(msg);
};
hammer.ontransformend = function(ev) {
    console.log("ontransformend");
    console.log(ev);
    var msg = "ontransformend " + pziW + " scale " + zoom;
    log(msg);
};

触摸滑动: http://jsfiddle.net/pE42S/1/

$(function() {      
    $("#touchme").swipe( {
        pinchStatus:function(event, phase, direction, distance , duration , fingerCount, pinchZoom) {
            console.log("pinchStatus");
            console.log(event);
            pziW=viewport_width - distance;
            $("#log").text(pziW);
            jqUpdateSize();
        },
        fingers:2,  
        pinchThreshold:0  
    });
});

有人有答案吗?

【问题讨论】:

标签: javascript android jquery hammer.js jquery-events


【解决方案1】:

现在您可以为此使用 Visual Viewport API(并非适用于所有浏览器)。只需检查window.visualViewport.scale > 1

【讨论】:

    【解决方案2】:

    实现此目的的一种方法是使用通用的 touchstart 处理程序:

    • 等到用户开始触摸至少两个点 (event.touches.length > 1)
    • 注意两个触摸的 x 和 y 开始坐标,附加 touchend 监听器
    • 等到触摸结束。
    • 移除 touchend 监听器并测量距离。

    使用手势事件和 event.scale 属性更容易,有关详细信息,请参阅Simplest way to detect a pinch 的精彩答案。

    【讨论】:

    • 嘿,你的逻辑解释得很好。但是我想知道为什么我们不使用它,如果我们使用 ScreenX / Y 坐标而不是 PageX / Y 会不会得到结果?
    最近更新 更多