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

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

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

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

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

https://img1.sycdn.imooc.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);

祝学习愉快!


好帮手慕久久 2021-11-12 18:31:57

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

祝学习愉快!

  • 提问者 leepulse #1

    <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>


    2021-11-12 22:04:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师