vr网页强制横屏后,手机屏幕手势滑动方向与网页实际运动方向垂直

示例网页:http://47.104.178.156/output08/index.html
全景漫游vr(360或720旋转的)网页,通过代码,强制网页横置后,在安卓系统手机上(竖屏状态下——手机自动旋转功能关闭)浏览网页,手指的滑动方向(上下、左右)与网页vr图片旋转方向相互垂直了——苹果机好像不存在这个问题,如果打开手机自动旋转功能,把手机横置后,操作方向就正常了,有能解决该问题的大咖么?如能解决,有偿感谢!

各位大咖,最好有验证过的、具体的解决问题的代码,如能解决问题,定当感谢!

可能是由于安卓系统手机在强制横置网页后,滑动方向与网页VR图片旋转方向相互垂直导致的。
这可能是由于手机浏览器对滑动事件的处理方式不同所致。

解决这个问题的一种方法是通过JavaScript代码来控制滑动事件的方向,使其与网页VR图片旋转方向保持一致。


<activity android:name=".Activity"
            android:screenOrientation="portrait"/>

可以自行设置screenOrientation屏幕朝向

结合GPT给出回答如下请题主参考
根据提供的信息,我们可以推断出以下情况:

  1. 当网页强制横屏后,在安卓系统手机上浏览时,手势滑动方向与网页实际运动方向垂直。这意味着,如果用户想在网页上向左滑动,实际上网页会向下滚动;如果用户想向上滑动,网页会向右移动,以此类推。

  2. 示例网页是一种全景漫游VR网页,其中包含360或720度旋转的场景。这种网页需要用户可以自由地控制视野,以便在全景中浏览不同的角度和场景。

  3. 通过代码,该网页被强制横置,在安卓系统手机上,这将改变网页的默认方向,使其更适合宽屏显示。但是,由于手机屏幕的方向与网页运动方向垂直,用户必须用不同的手势来控制视野,这可能会影响用户体验。

总之,网页设计师需要对这种情况进行考虑,以确保用户可以轻松地使用网页,同时获得最佳的浏览体验。可能需要通过调整手势控制方式或其他方法来实现这一目标。

【以下回答由 GPT 生成】

我可以帮助您解决这个问题。

这个问题的根本原因是,当您将网页强制横置后,手机的计算触摸手势和网页显示方向的引擎之间发生了冲突。这是一个常见的问题,可以通过以下步骤来解决:

  1. 检查代码中的viewport标签:确保您的网页头部中正确设置了viewport标签,以便在移动设备上正确缩放和显示内容。例如,可以使用以下代码:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  1. 检查CSS样式:确保您的CSS样式表中没有任何与手势或触摸事件冲突的样式设置。特别是,检查是否有任何"touch-action"样式或与触摸事件相关的事件处理器。

  2. 使用JavaScript处理事件:您可以使用JavaScript来处理手机的触摸事件,并将其与网页的显示方向进行同步。这涉及到获得手机的加速度计和陀螺仪数据,并通过计算旋转角度来更新网页图片的显示方向。

以下是一个JavaScript代码示例,用于处理手机触摸事件并调整网页图片的旋转方向:

// 获取设备方向
window.addEventListener("deviceorientation", function(event) {
  var alpha = event.alpha; // 设备绕Z轴旋转的角度(值范围:0-360)
  var beta = event.beta; // 设备绕X轴旋转的角度(值范围:-180-180)
  var gamma = event.gamma; // 设备绕Y轴旋转的角度(值范围:-90-90)

  // 运用角度计算旋转方向,然后更新网页图片
  // ...
});

您可以根据具体的需求进行更多的处理,例如将角度转换为旋转方向,使用CSS3的transforms属性来旋转图片等等。

需要注意的是,这种解决方案可能需要您具备一定的JavaScript和前端开发经验,因此如果您不熟悉这些技术,可能需要寻求专业的帮助。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

网站打不开

screenOrientation屏幕朝向可以设置的呀

引用 皆我百晓生 小程序回复内容作答:
您好!对于您的问题,我建议您尝试以下解决方案:

  1. 通过CSS样式设置旋转角度:您可以在CSS样式表中使用transform属性设置页面的旋转角度。例如,使用以下代码将页面旋转90度:

    body {
    transform: rotate(90deg);
    }
    
  2. 监听设备方向事件:您可以使用JavaScript代码监听设备方向事件,并根据设备的方向来调整滑动方向。您可以使用以下代码示例来监听设备方向事件,并根据需要进行处理:

    window.addEventListener('deviceorientation', function(event) {
    // 检测设备的旋转方向(event.alpha, event.beta, event.gamma)
    // 根据需要进行相应的操作
    });
    

请注意,以上解决方案是一般性建议,并不保证能够完全解决您的问题。您可能需要进一步研究和尝试不同的方法,以实现您期望的效果。希望这些信息对您有所帮助!如有其他问题,请随时提问。

该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


很抱歉,由于手机设备的多样性,我无法提供具体的代码来解决您的问题。不过,我可以给您一些思路,希望能够帮到您。

首先,您需要在网页中通过代码禁用手机自动旋转功能,这可以通过使用以下代码实现:

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

这将禁止用户缩放网页,并防止网页随着设备的旋转而自动旋转。

接下来,您可以使用JavaScript来检测用户的手指滑动方向,并以相反的方向旋转VR图片。这可以通过使用以下代码实现:

var startX, startY, endX, endY;

document.addEventListener('touchstart', function(event) {
  startX = event.touches[0].pageX;
  startY = event.touches[0].pageY;
}, false);

document.addEventListener('touchmove', function(event) {
  endX = event.touches[0].pageX;
  endY = event.touches[0].pageY;
}, false);

document.addEventListener('touchend', function(event) {
  if (Math.abs(endX - startX) > Math.abs(endY - startY)) {
    // 用户左右滑动,可以使用如下代码旋转 VR 图片:
    if (endX > startX) {
      // 向右滑动,将 VR 图片向左旋转
    } else {
      // 向左滑动,将 VR 图片向右旋转
    }
  } else {
    // 用户上下滑动,可以使用如下代码旋转 VR 图片:
    if (endY > startY) {
      // 向下滑动,将 VR 图片向上旋转
    } else {
      // 向上滑动,将 VR 图片向下旋转
    }
  }
}, false);

注意,这只是一个基本的示例,您需要根据您的具体情况进行修改。

最后,您需要使用CSS样式将网页强制横置,这可以通过以下代码实现:

body {
  transform: rotate(90deg);
  transform-origin: top left;
  width: 100vh;
  height: 100vw;
  overflow-x: hidden;
  position: absolute;
  top: 100%;
  left: 0%;
}

这将使网页内容旋转90度,并强制横置。

希望这些思路能够帮到您解决问题。如果您需要更具体的代码帮助,建议向专业的开发者咨询。


在 Android 的清单文件(AndroidManifest.xml)中设置了一个名为 Activity 的活动,并强制将其屏幕方向锁定为纵向(竖屏)模式。
这样做的效果是,无论用户如何旋转设备,这个活动都会一直保持竖屏模式
如果你的问题是在这个竖屏锁定状态下,全景漫游VR页面在安卓手机上的手指滑动与图片旋转方向相互垂直,这可能需要一些额外的代码来调整触摸事件的处理逻辑,以确保它与图片的旋转方向保持一致。
你可能需要在你的代码中查找触摸事件的处理逻辑,并根据设备的朝向做出相应的调整。有问有答,一起加油~

可以使用以下代码来检测屏幕的旋转角度:


// 获取当前屏幕的方向
int rotation = getWindowManager().getDefaultDisplay().getRotation();
// 根据旋转角度来处理UI和用户交互
switch (rotation) {
    case Surface.ROTATION_0:
        // 正常横屏
        break;
    case Surface.ROTATION_90:
        // 逆时针旋转90度
        break;
    case Surface.ROTATION_180:
        // 逆时针旋转180度
        break;
    case Surface.ROTATION_270:
        // 逆时针旋转270度
        break;
}

看能不能解决你的问题

谢谢!检测完了呢?我这个是网页横置,但手机屏幕滑动方向和网页变化方向垂直了。

这个可以自己打印获取的数据出来看看,看看参数的数据。

为了解决在安卓系统手机上浏览全景漫游vr网页时手指滑动方向与图片旋转方向不一致的问题,可以通过以下步骤:

  1. 在网页代码中添加以下CSS代码:
@media screen and (orientation: portrait) {
  body {
    transform: rotate(-90deg);
    transform-origin: top left;
    width: 100vh;
    height: 100vw;
    overflow-x: hidden;
    position: absolute;
    left: 100%;
    margin-left: -100vh;
  }
}

这段代码会将网页旋转-90度,使之横置显示。需要注意的是,这段代码只会在手机竖屏状态下生效,并且需要在viewport标签中设置width=device-width, initial-scale=1.0。

  1. 在网页中添加全局变量:
var touchX, touchY;

这个变量用来记录手指在屏幕上的位置。

  1. 监听touchstart、touchmove、touchend事件,并根据手指移动的方向旋转图片:
var img = document.getElementById("vr-image"); // 图片的id
img.addEventListener("touchstart", function(event) {
  touchX = event.touches[0].clientX;
  touchY = event.touches[0].clientY;
});

img.addEventListener("touchmove", function(event) {
  var deltaX = event.touches[0].clientX - touchX;
  var deltaY = event.touches[0].clientY - touchY;
  var rotateX = parseFloat(img.getAttribute("data-rotate-x"));
  var rotateY = parseFloat(img.getAttribute("data-rotate-y"));
  img.setAttribute("data-rotate-x", rotateX + deltaY);
  img.setAttribute("data-rotate-y", rotateY + deltaX);
  img.style.transform = "rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
});

img.addEventListener("touchend", function(event) {
  touchX = null;
  touchY = null;
});

这段代码会根据手指在屏幕上移动的方向调整图片的旋转角度,从而实现手指滑动方向与图片旋转方向相一致的效果。

需要注意的是,在使用这种方案时,需要将手机自动旋转功能关闭,否则网页会在手机自动旋转时变为竖屏显示,无法触发CSS旋转和手指移动旋转的效果。

在JavaScript中,你可以检测用户的设备类型(安卓还是苹果)和页面的方向。
根据设备的类型和页面的方向,你可以设定特定的UI控制逻辑。
如果你发现用户在安卓设备上,且页面是竖向的,你可以创建一个自定义的触摸事件处理器来处理用户的滑动行为。
可以使用以下代码:


javascript
let userIsOnAndroid = /Android/i.test(navigator.userAgent);
let rotationAngle = 0;

window.addEventListener('resize', function() {
    if (window.innerWidth > window.innerHeight) {
        rotationAngle = 90;
    } else if (window.innerWidth < window.innerHeight) {
        rotationAngle = -90;
    } else {
        rotationAngle = 0;
    }
    updateRotation();
});

function updateRotation() {
    if (userIsOnAndroid && rotationAngle !== 0) {
        let tempAngle = rotationAngle;
        if (tempAngle === 90) {
            // swipe up or down when rotation is 90 degrees clockwise
            window.addEventListener('touchstart', function(e) {
                e.preventDefault();
                if (e.touches[0].pageY < window.innerHeight / 2) {
                    // swipe up
                    // rotate VR image 90 degrees counterclockwise
                } else {
                    // swipe down
                    // rotate VR image 90 degrees clockwise
                }
            }, false);
        } else if (tempAngle === -90) {
            // swipe left or right when rotation is -90 degrees clockwise
            window.addEventListener('touchstart', function(e) {
                e.preventDefault();
                if (e.touches[0].pageX < window.innerWidth / 2) {
                    // swipe left
                    // rotate VR image 90 degrees counterclockwise
                } else {
                    // swipe right
                    // rotate VR image 90 degrees clockwise
                }
            }, false);
        }
    } else {
        // remove the touchstart event listeners if rotation angle is 0 or user is not on Android
        window.removeEventListener('touchstart', function() {}, false);
    }
}

参考gpt
对于您的VR网页强制横屏后,手机屏幕手势滑动方向与网页实际运动方向垂直的问题,我理解您希望手指的滑动方向与网页VR图片旋转方向保持一致。

这个问题可能是由于手机浏览器的默认滑动方向设置引起的。为了解决这个问题,您可以尝试在您的网页中添加一些JavaScript代码来适应手机浏览器的滑动方向。

以下是一个可能的解决方案,您可以尝试将其添加到您的网页中:

// 检测设备方向是否支持
if (window.DeviceOrientationEvent) {
  // 监听设备方向变化事件
  window.addEventListener('deviceorientation', function(event) {
    var gamma = event.gamma; // 获取设备的gamma值
    var beta = event.beta; // 获取设备的beta值

    // 根据gamma和beta值判断滑动方向
    if (Math.abs(gamma) > Math.abs(beta)) {
      // 横向滑动
      // 在此处添加您的横向滑动处理代码
    } else {
      // 纵向滑动
      // 在此处添加您的纵向滑动处理代码
    }
  });
}

上述代码会检测设备方向事件,并根据设备的gamma和beta值来判断滑动方向。您可以根据横向滑动和纵向滑动的情况,在相应的代码块中添加您的处理逻辑。

请注意,由于不同的手机浏览器和设备可能会有不同的行为,这个解决方案可能在某些情况下无法完全解决问题。您可能需要根据您的具体需求和设备测试进行调整和优化。


https://github.com/ustbhuangyi/better-scroll/issues/857

强制横屏开发问题 - 掘金 前言 最近开发的横屏项目终于上线了,在开发中遇到了很多问题,最后都一一解决了。 需求来了 产品的需求明确是要强制横屏,这样微信和浏览器能保持一致,一屏展示,各个端都要保持一致,完美! 实际内心接手是非 https://juejin.cn/post/7148736708144529416

用设备的方向传感器来获取设备的方向信息,然后根据方向信息调整滑动事件处理逻辑。这样可以更加精确地控制 VR 图片的旋转方向。以下是一个示例代码:

window.addEventListener('deviceorientation', function(e) {
  // 获取设备的方向信息
  var alpha = e.alpha;
  var beta = e.beta;
  var gamma = e.gamma;
  
  // 根据方向信息调整滑动事件处理逻辑
  // 可以使用你 VR 图片的相应 API 来实现
});

这里的 alpha、beta 和 gamma 分别表示设备绕 Z 轴、X 轴和 Y 轴旋转的角度信息

安卓手机对滑动事件的处理逻辑不一样