如何阻止win7触控平台上chrome的默认双指拉伸缩放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何阻止win7触控平台上chrome的默认双指拉伸缩放相关的知识,希望对你有一定的参考价值。

使用meta声明不允许缩放

html代码

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

并且在js里添加了如下语句: 

javascript代码

document.body.addEventListener(\'touchmove\', function(event) 
event.preventDefault();
, false); 
document.body.addEventListener(\'touchstart\', function(event) 
event.preventDefault();
, false); 
document.body.addEventListener(\'gesturechange\', function(event) 
event.preventDefault();
, false);
参考技术A 步骤:
1,右键单击 我的电脑,管理,找到服务图标,双击打开服务项

2,在服务窗口中,在右侧服务中找到Google更新服务(Gupdate)项与Google更新服务(Gupdatem)

3,双击Google更新服务(Gupdate)项,在打开的窗口中点击启动类型下拉菜单,在弹出菜单中选择“禁用”菜单项,服务状态选择“停止”,然后点击确定按钮,
4,双击Google更新服务(Gupdatem)项,在打开的窗口中点击启动类型下拉菜单,在弹出菜单中选择“禁用”菜单项,服务状态选择“停止”,然后点击确定按钮,重新启动电脑后,chrome浏览器就不再自动升级了

如何使用 Espresso 执行多点触控滑动?

【中文标题】如何使用 Espresso 执行多点触控滑动?【英文标题】:How can I perform a multi touch swipe with Espresso? 【发布时间】:2015-03-13 13:45:28 【问题描述】:

例如两指向右滑动。

【问题讨论】:

【参考方案1】:

正如@Daniel 建议的那样,我创建了一个自定义版本的 MotionEvents,因为当使用多个手指时,您必须注入 ACTION_POINTER_DOWN/UP 而不是 ACTION_DOWN/UP。 我创建了一个双指版本的 LinearSwipe,如下所示:

private static Swiper.Status sendLinearSwipe(UiController uiController,
                                             float[] startCoordinates,
                                             float[] startCoordinatesSecondFinger,
                                             float[] endCoordinates,
                                             float[]endCoordinatesSecondFinger,
                                             float[] precision,
                                             float[] precisionSecond,
                                             int duration) 
    checkNotNull(uiController);
    checkNotNull(startCoordinates);
    checkNotNull(startCoordinatesSecondFinger);
    checkNotNull(endCoordinates);
    checkNotNull(endCoordinatesSecondFinger);
    checkNotNull(precision);
    checkNotNull(precisionSecond);

    float[][] steps = interpolate(startCoordinates, endCoordinates, SWIPE_EVENT_COUNT);
    float[][] stepsSecondFinger = interpolate(startCoordinatesSecondFinger, endCoordinatesSecondFinger, SWIPE_EVENT_COUNT);
    final int delayBetweenMovements = duration / steps.length;
    final int delayBetweenMovementsSecondFinger = duration / stepsSecondFinger.length;

    int maxLength=Math.min(steps.length, stepsSecondFinger.length);

    MotionEvent downEvent;
    downEvent = MotionEvents.sendDown(uiController, steps[0], precision,true).down;
    MotionEvent downEventSecondFinger;
    downEventSecondFinger = MotionEvents.sendDown(uiController,stepsSecondFinger[0], precisionSecond,false).down;

    try 
        for (int i = 1; i < maxLength; i++) 

            if (sendMovement(uiController, steps[i], downEvent)) return Status.FAILURE;
            if (sendMovement(uiController, stepsSecondFinger[i], downEventSecondFinger)) return Status.FAILURE;


            long desiredTime = downEvent.getDownTime() + delayBetweenMovements * i;
            long desiredTimeSecondFinger = downEventSecondFinger.getDownTime() + delayBetweenMovementsSecondFinger * i;

            long timeUntilDesired = desiredTime - SystemClock.uptimeMillis();
            long timeUntilDesiredSecondFinger = desiredTimeSecondFinger - SystemClock.uptimeMillis();
            loopMainThread(uiController, timeUntilDesired);
            loopMainThread(uiController, timeUntilDesiredSecondFinger);

        

        if (!MotionEvents.sendUp(uiController, downEventSecondFinger, endCoordinatesSecondFinger,false)) 
            Log.e(TAG, "Injection of up event as part of the swipe failed. Sending cancel event.");
            MotionEvents.sendCancel(uiController, downEventSecondFinger);
            return Swiper.Status.FAILURE;
        
     finally 
        downEvent.recycle();
        downEventSecondFinger.recycle();
    
    return Swiper.Status.SUCCESS;


private static void loopMainThread(UiController uiController, long timeUntilDesired) 
    if (timeUntilDesired > 10) 
        uiController.loopMainThreadForAtLeast(timeUntilDesired);
    


private static boolean sendMovement(UiController uiController, float[] step, MotionEvent downEvent) 
    if (!MotionEvents.sendMovement(uiController, downEvent, step)) 
        Log.e(TAG, "Injection of move event as part of the swipe failed. Sending cancel event.");
        MotionEvents.sendCancel(uiController, downEvent);
        return true;
    
    return false;

现在完美运行!谢谢@丹尼尔

【讨论】:

能否在示例中也包含 interpolate 方法?【参考方案2】:

Espresso 不提供该功能,但您可以自己完成

注入两个向下事件 注入几对运动事件,每个手指一个 注入两个向上事件

Espresso 有一些实用程序可以让您更轻松地进行操作。特别是,MotionEvents 类有一些帮助方法来创建和注入这些低级事件。

您可能需要参考sendLinearSwipe 代码,其中包含单点触摸滑动的大部分逻辑。

如果您将其写为ViewAction,它将完全适合 Espresso 框架(例如,您可以轻松地让它等待空闲资源)。

【讨论】:

谢谢,我现在可以使用它了。但是,当我注入两个向上事件时它会失败。但是,如果我只注入一个向上事件,它就可以正常工作:)

以上是关于如何阻止win7触控平台上chrome的默认双指拉伸缩放的主要内容,如果未能解决你的问题,请参考以下文章

笔记本电脑触控板操作小结

2020-02-29 mac触摸板常用手势

unity 在mac 中 怎么用触控板 让界面旋转

Mac新手必看:Mac电脑触控板与聚焦功能

如何使用 Espresso 执行多点触控滑动?

获取煎茶触控平台名称