我编写好了返回顶部的按钮逻辑,为什么在真机上调试会无效?

来源:2-2 使用Scss 组织地址区域布局

leepulse

2021-11-12 18:29:10

在电脑端上调试没问题,手机端就不行

写回答

2回答

好帮手慕久久

2021-11-13

同学你好,由于移动端不支持 document.documentElement.scrollTop这个属性,导致移动端滚动不了,建议做如下调整:

https://img.mukewang.com/climg/618f18b5090aeb1012800802.jpg

const backTop = setInterval(() => {

        document.documentElement.scrollTop -= 100;

        document.body.scrollTop -= 100;

        var nowTop = document.documentElement.scrollTop || document.body.scrollTop;

        if (nowTop <= 0) {

          clearInterval(backTop);

        }

      }, 20);

祝学习愉快!


0

好帮手慕久久

2021-11-12

同学你好,建议把代码粘贴出来,顺便说一下是哪种机型,老师测试一下,再为你解答。

祝学习愉快!

0
heepulse
hp><template>

  <div class="wrapper" ref="wrapper">

    <Publish />

    <Selects />

    <Comment />

    <Package />

    <button class="receive" v-show="show">

      <img class="receive__btn" src="./assets/banner14.ca023c2c.png" @click="handleBtnTop"/>

    </button>

  </div>

</template>


<script>

import { ref, onMounted } from "vue";

import Publish from "./components/Publish.vue";

import Selects from "./components/Selects.vue";

import Comment from "./components/Comment.vue";

import Package from "./components/Package.vue";


export default {

  name: "App",

  components: {

    Publish,

    Selects,

    Comment,

    Package,

  },

  setup() {

    const wrapper = ref(null);

    const show = ref(false);

    const handleBtnTop = () => {

      clearInterval(backTop);

      const backTop = setInterval(() => {

        document.documentElement.scrollTop -= 100;

        if (document.documentElement.scrollTop < 500) {

          clearInterval(backTop);

        }

      }, 20);

    };


    onMounted(() => {

      window.addEventListener("scroll", () => {

        wrapper.value = document.documentElement.scrollTop || window.scrollY;

        if (wrapper.value > 500) {

          show.value = true;

        } else {

          show.value = false;

        }

      });

    });


    return { wrapper, show, handleBtnTop };

  },

};

</script>


<style lang="scss">

.wrapper {

  background-color: #ca2322;

  .receive {

    width: 2.6rem;

    position: fixed;

    left: 50%;

    bottom: 0.1rem;

    margin-left: -1.3rem;

    background: none;

    animation: btnFrame 2s linear infinite;

    &__btn {

      width: 100%;

      vertical-align: middle;

    }

  }

  @keyframes btnFrame {

    50% {

      transform: scale(1.1);

      transform-origin: center;

    }

  }

}

</style>


h021-11-12
共1条回复

0 学习 · 15276 问题

查看课程