VueJ:通过路由防止在IOS10 +上弹跳和缩放

时间:2018-07-31 13:40:09

标签: javascript ios vue.js vuejs2 vuetify.js

目前,我正在开发与Threejs相关的Vuejs应用。 3D模型将在以后显示。作为框架,我将vuejs与vuetify结合使用。我使用来自vuejs的路由器。

由于我要显示3D模型,因此不希望在浏览器中进行缩放。此外,必须停用智能手机上当今的现代浏览器可以做出的所有手势,以避免例如意外重新加载页面。我为此使用meta标签:

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

不幸的是,它不适用于IOS10 +。所以我用了InoBounce.js。该脚本应该可以解决此问题。

这在开始页面上很好用,但是在我通过按钮更改路线后在任何页面上都没有。因此,当我单击一个按钮返回到起始页面时,该脚本不再在此处运行。这可能是因为创建者没有使其适应vuejs。

我已经尝试在更改路线时使用观察程序再次运行脚本。我已经对该脚本进行了一些重写,以便它不再希望在全局范围内创建自己,而是包含一个导出的方法。然后,我使用Vuex将其“全局”嵌入,然后在每次路线更改时都运行它。看起来像这样:

 watch: {
   $route(to, from) {
     this.$store.state.bounceFix.fixBounce();
  },
 },

浏览器中的调试器还指示每次路由更改时都会调用该方法。但是它仍然只在第一次加载时才在主页上起作用(嗯,因为我也在“安装”区域中称呼它)。

所以...。我真的是互联网上唯一想阻止与vuejs之类的框架进行缩放的人吗?因为不幸的是,我在互联网上找不到很多与此有关的东西。

与vuejs关联的野生动物园中阻止缩放和弹跳的最佳方法是什么?

更新:

我忘记了一件重要的事情:

我还必须将以下几行作为样式添加到标签中:

overflow: auto;
    -webkit-overflow-scrolling: touch;

这应该阻止“刷卡刷新”之类的手势。

2 个答案:

答案 0 :(得分:0)

你可以试试吗?

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

答案 1 :(得分:0)

我找到了解决问题的方法。问题在于inobounce脚本中的事件侦听器设置为“ window”元素。我现在将其更改为“ document”元素。现在就可以了。

这个意思:

window.addEventListener('touchstart', handleTouchstart, supportsPassiveOption ? { passive : false } : false);

对此:

document.addEventListener('touchstart', handleTouchstart, supportsPassiveOption ? { passive : false } : false);