记录解决IOS滚动跳转不生效问题

目录

背景 :

解决过程 :

解决方案 :

最终代码 :


背景 :

项目类似于问卷星里面的问卷调查,当你点击提交按钮时,

页面会有弹窗提醒你有哪些题型没回答,点击确认之后,

页面滚动条会自动跳转至未回答项的 offsetTop 高度位置

记录解决IOS滚动跳转不生效问题_第1张图片记录解决IOS滚动跳转不生效问题_第2张图片

记录解决IOS滚动跳转不生效问题_第3张图片记录解决IOS滚动跳转不生效问题_第4张图片

以上就是本期所遇到的问题


原项目代码如下 :


解决过程 :

记录解决IOS滚动跳转不生效问题_第5张图片记录解决IOS滚动跳转不生效问题_第6张图片

记录解决IOS滚动跳转不生效问题_第7张图片记录解决IOS滚动跳转不生效问题_第8张图片


解决方案 :

️两点 :

1、document.getElementByClassName ,这是原生方法

IOS 有的时候获取不到会很容易出 Bug(经常性获取不到 DOM ),指定不行 。

所以我们需要换一种写法来搞 :

 能用 ref 就不用原生的 : this.$refs.xxx. 

2、解决问题的关键点 :

IOS 项目一般都是使用 scrollTop

所以 将 scrollTo( ) 替换为 :scrollTop = n  的写法

 不用 scrollTop , 改用 scrollTop 

( 这里可以判断一下系统,安卓系统完全还是可以使用 scrollTo 的,以保留 smooth 效果 )


最终代码 :

(err) => {
  let unAnswer = []; // 未答项数组
  err.forEach((item) => unAnswer.push(item.name));
  unAnswer = Array.from(new Set(unAnswer));
  Dialog.alert({
    title: '提示',
    message: `${unAnswer.join('、 ')}题未正确作答!`,
  }).then(() => {
    let uaHeight = document.getElementById(
      'revise-' + (unAnswer[0] - 1)
    ).offsetTop;
    // 判断是否为 IOS
    let u = navigator.userAgent;
    let isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios终端
    // 重点标记处( 主要代码 )
    if (isIOS) {
      // IOS 项目一般都是使用 scrollTop = n
      this.$refs.ele.scrollTop = uaHeight;
    } else {
      // 重点标记处(scrollTo在IOS的兼容性不太好)
      this.$refs.ele.scrollTo({
        top: uaHeight,
        behavior: 'smooth',
      });
    }
  });
}

你可能感兴趣的:(前端,Vue,前端,Vue,IOS)