fruge365 2024-03-19 19:11 采纳率: 25%
浏览 21
已结题

vue2(标签-chrome|关键词-浏览器兼容)

vue2项目中使用数字滚动效果,chrome浏览器和edge浏览器没问题,firefox打开就变样了。是浏览器兼容问题吗,不知道怎么解决(图片附下面)

chrome浏览器打开的

img

firefox浏览器打开的

img

数字滚动是cv来的,封装好的代码,代码如下

<template>
  <div
    style="
      display: inline-flex;
      justify-content: flex-start;
      align-items: center;
    "
  >
    <div
      v-for="(item, index) in numberList"
      :key="index"
      style="
        display: inline-flex;
        justify-content: flex-start;
        align-items: center;
        padding-bottom: 0.3rem;
        box-sizing: border-box;
      "
    >
      <span v-if="isNaN(item)">{{ item }}</span>
      <div class="number" v-else :style="{ color: TextColor }">
        <span
          class="number-item"
          ref="numberItem"
          :data-number="item"
          :data-index="index"
          >0123456789</span
        >
      </div>
    </div>
  </div>
</template>
 
<script>
export default {
  name: "ScrollNumber",
  props: {
    value: {
      type: [String, Number],
      default: 0,
    },
    TextColor: {
      type: [String],
      default: "black",
    },
  },
  watch: {
    value: {
      handler(newValue, oldValue) {
        // console.log("🚀 ~ value ~ newVal:", newValue);
        if (newValue) {
          this.$nextTick(() => {
            this.setNumberTransform();
          });
        }
      },
      deep: true,
      immediate: true,
    },
  },
  computed: {
    numberList() {
      return String(this.value).split("");
    },
  },
  data() {
    return {
      hasShow: false, // 是否已展示过动画
    };
  },
  mounted() {
    window.addEventListener("scroll", this.scrollHandle, true); // 监听 监听元素是否进入/移出可视区域
  },

  methods: {
    scrollHandle() {
      const offset = this.$el.getBoundingClientRect();
      const offsetTop = offset.top;
      const offsetBottom = offset.bottom;
      // 进入可视区域
      if (offsetTop <= window.innerHeight && offsetBottom >= 0) {
        this.setNumberTransform();
        this.hasShow = true;
        window.removeEventListener("scroll", this.scrollHandle, true);
      } else {
        // 移出可视区域
        if (this.hasShow) {
          window.removeEventListener("scroll", this.scrollHandle, true);
        }
      }
    },
    // 设置每一位数字的偏移
    setNumberTransform() {
      let numberItems = this.$refs.numberItem;
      let obj = {};
      Array.from(numberItems).forEach((c) => {
        let key = c.dataset.index;
        let value = c.dataset.number;
        let init = 0;
        obj[key] = setInterval(() => {
          if (init < value * 10) {
            init += 1;
            c.style.transform = `translateY(-${init}%)`;
          } else {
            clearInterval(obj[key]);
            obj[key] = null;
          }
        }, 8);
      });
    },
  },
};
</script>
 
<style scoped lang="scss">
.number {
  width: 27px;
  height: 35px;
  font-size: 25px;
  font-weight: 800;
  text-align: center;
  overflow: hidden;
  span {
    text-align: center;
    writing-mode: vertical-rl;
    text-orientation: upright;
    transform: translateY(0%);
  }
}
</style>

如果能解决请附代码谢谢!

  • 写回答

15条回答 默认 最新

  • 喵手 2024-03-19 22:44
    关注

    该回答引用ChatGPT辅助答疑,若有帮助,还请题主采纳。


    根据你提供的代码和问题描述,我注意到在 Firefox 浏览器中,数字滚动效果显示有问题。这可能是由于 Firefox 对 writing-mode 属性的处理方式与 Chrome 和 Edge 不同所致。为了解决这个问题,你可以尝试以下修改:

    <span> 标签的样式中的 writing-mode: vertical-rl; 改为 writing-mode: vertical-lr;,即从垂直从右到左改为垂直从左到右。修改后的代码如下:

    <style scoped lang="scss">
    .number {
      width: 27px;
      height: 35px;
      font-size: 25px;
      font-weight: 800;
      text-align: center;
      overflow: hidden;
      span {
        text-align: center;
        writing-mode: vertical-lr; /* 修改这一行 */
        text-orientation: upright;
        transform: translateY(0%);
      }
    }
    </style>
    

    这样修改之后,应该可以解决数字滚动效果在 Firefox 浏览器中显示有问题的情况。请尝试一下并确认是否解决了问题。如果你还有其他问题,请随时告诉我。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月22日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 数据量少可以用MK趋势分析吗
  • ¥15 使用VH6501干扰RTR位,CANoe上显示的错误帧不足32个就进入bus off快慢恢复,为什么?
  • ¥15 大智慧怎么编写一个选股程序
  • ¥100 python 调用 cgps 命令获取 实时位置信息
  • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
  • ¥15 C语言使用vscode编码错误
  • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
  • ¥20 ensp怎么配置让PC1和PC2通讯上
  • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中