回到页面顶部(回到顶部、过渡动画)

这篇具有很好参考价值的文章主要介绍了回到页面顶部(回到顶部、过渡动画)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目背景:
vue

1.创建 backtop.vue 的回到顶部逻辑的组件
<template>
  <transition name="back-up-fade">
    <div
      class="back-top"
      :style="{
        bottom: bottom + 'px',
        right: right + 'px',
      }"
      @click.stop="handleBackTopClick($event)"
      v-if="show"
    >
      <div class="back-text-contaner card">
        <!-- 提供了插槽显示插槽内容 -->
        <slot v-if="$slots.default"></slot>
        <!-- 没提供,使用默认的 -->
        <div class="default-text" v-else>
          up
        </div>
      </div>
    </div>
  </transition>
</template>

<script>
// 导入节流函数
// import { throttle } from "./utils";
 let throttle=function(fn, intervalTime = 200, immediate = true) {
  let oldTime = Date.now();
  return function (...arg) {
    if (immediate) {
      fn.bind(this)(...arg);
      immediate = false;
    }
    let nowTime = Date.now();
    if (nowTime - oldTime >= intervalTime) {
      fn.bind(this)(...arg);
      oldTime = nowTime;
    }
  };
}

export default {
  props: {
    // 触发滚动的容器
    target: {
      type: String,
      default: "",
    },
    // 滚动高度达到此参数值才出现
    visibilityHeight: {
      type: Number,
      default: 100,
    },
    // 控制其显示位置, 距离页面右边距
    right: {
      type: Number,
      default: 270,
    },
    // 控制其显示位置, 距离页面底部距离
    bottom: {
      type: Number,
      default: 60,
    },
  },
  data() {
    return {
      // 滚动容器
      container: null,
      // 是否显示
      show: false,
      // 定时器标识
      timer: null,
      // 包裹元素节点
      el: "",
    };
  },
  mounted() {
    //节流处理,避免频繁触发事件
    this.throttleHandleContanierScroll = throttle(
      this.handleContanierScroll,
      10,
      false
    );
    this.init();
  },
  methods: {
    init() {
      // 默认滚动元素为document
      this.container = document;
      this.el = document.documentElement;
      // 外部传入滚动包裹元素时候
      if (this.target) {
        const el = document.querySelector(this.target);
        el ? (this.container = el && (this.el = el)) : null;
      }
      // console.log(this.container);
      this.container.addEventListener(
        "scroll",
        this.throttleHandleContanierScroll,
        false
      );
    },
    // 回到顶部点击
    handleBackTopClick(e) {
      // 给回到顶部一定过度事件
      console.log(e,'>>>>>>>>');
      this.timer = setInterval(() => {
        this.scrollToTop();
      }, 16);
      // 通知用户
      this.$emit("backUpClick", e);
    },
    // 滚动事件
    handleContanierScroll() {
      // 滚动超出给定高度则显示,否则隐藏
      if (this.el.scrollTop > this.visibilityHeight) {
        this.show = true;
      } else {
        this.show = false;
      }
    },
    // 滚动到顶部
    scrollToTop() {
      if (this.el.scrollTop > 0) {
        this.el.scrollTop -= 50;
      } else {
        clearInterval(this.timer);
      }
    },
  },
  beforeDestroy() {
    // 销毁定时器
    clearInterval(this.timer);
    this.timer = null;
  },
};
</script>

<style lang="scss">
.back-top {
  // position: fixed;
  // background-color: #fff;
  // width: 40px;
  // height: 40px;
  background: rgba(226, 243, 255, 0.8);
  border-radius: 10px 10px 10px 10px;
  border: 1px solid #BADAFD;
  padding: 10px;
  opacity: 1;

  // border-radius: 50%;
  color: #409eff;
  display: flex;
  align-items: center;
  justify-content: center;
  // font-size: 20px;
  // box-shadow: 0 0 6px rgb(0 0 0 / 12%);
  cursor: pointer;
  z-index: 999;
}
.back-up-position {
  position: relative;
}

// 过度动画
.back-up-fade-enter-active {
  transition: opacity 0.3s linear;
}
.back-up-fade-enter {
  opacity: 0;
}
.back-up-leave-to {
  opacity: 0;
}
</style>

2.在相应的组件位置进行引用
//引入组件
import backtop from "./backtop.vue";

//注册组件
components: { backtop },

//组件使用
<backtop :visibility-height="200" @backUpClick="handleBackUpClick">
   <span>回到顶部</span>
</backtop>

backUpClick 为点击按钮回到顶部后触发的事件

进行组件封装 可以与业务代码进行解耦,预留插槽位置可以保留外部的样式定制化,预留外部api的定制化操作。文章来源地址https://www.toymoban.com/news/detail-747735.html


到了这里,关于回到页面顶部(回到顶部、过渡动画)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter动画库:animations(路由过渡动画或者页面切换动画)

    animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。 这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 看了下官方文档和官方例子,然后就有点懵。差点以为找错库了。还好flutter中的库可以直接点开(

    2024年02月16日
    浏览(44)
  • scroll-view回到顶部的使用(scroll-top)

    scroll-view遇到的坑!!加载分页数据的时候再次调用搜索接口会多调用一次触底事件!!导致每次重新搜索的时候渲染页面都多5条出来,还会出现两次加载中的弹框,用户体验差 无解 所以用到scroll-view中的scroll-top事件,让滚动条强行到顶部 官方文档:https://uniapp.dcloud.net.c

    2024年02月11日
    浏览(53)
  • vue刷新页面回到首页

    记录一下,实现项目中的小需求, 刷新页面回到首页 在App.vue中添加如下代码即可 在created函数中判断当前路由地址是否在首页home,如果不在则替换为home页面

    2024年02月11日
    浏览(48)
  • Android远程过渡动画

    Android的系统动画我分为三类:窗口动画,过渡动画,旋转动画。而这篇文章将分析过渡动画。而过渡动画根据创建leash和运行动画是否在同一个进程可以分为本地过渡动画和远程过渡动画,启动远程过渡动画流程相比于其他系统动画的过程,因为涉及到了跨进程,所以涉及到

    2024年01月21日
    浏览(53)
  • 前端高度变化实现过渡动画

    前提:已知初始高度与最终高度。 如果有这个前提,那么这个动画是最好实现的了。 利用最大高度实现过度动画。 但是有缺陷,如果最大高度大于需要的高度,就会有明显的延迟。(相当于设置了初始高度与最终高度) 利用的就是放大,缩小。 这个方法是用css实现最简单

    2024年03月21日
    浏览(54)
  • React 之 过渡动画

    在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验 可以通过原生的CSS来实现这些过渡动画,但是React社区为我们提供了react-transition-group用来完成过渡动画 React曾为开发者提供过动画插件 react-addons-css-transition-group,后由社区维护,形成

    2024年02月13日
    浏览(41)
  • CSS基础-过渡动画

    CSS3新添加了过渡动画, 即使用者定义好 一个元素的 开始状态 和 结束状态 , CSS会根据变化曲线形成 补间动画 效果。 CSS3中用 transition 属性来描述动画如何运动。 定义 下面我们重点了解下, 哪个属性需要过渡 , 还有 变化曲线是什么 下面我们重点聊聊两点: 哪个属性需要

    2024年02月10日
    浏览(50)
  • 【CSS】过渡动画

    不加过渡动画,变化不太流畅 MDN css transitions w3school transform transform :用于元素的变形,显示变形后的状态,不是变形的过程,变形过程需要配合 transition 表示 2D 转换 translate(50px, 100px) 平移 rotate(20deg) 顺时针旋转 20 度 rotateX(150deg) 绕其 X 轴旋转给定角度 scaleX(2) 增大为其原始

    2024年02月04日
    浏览(38)
  • vue3回到上一个路由页面

    Vue Router获取当前页面由哪个路由跳转 在Vue3的setup中如何使用this beforeRouteEnter 在这个路由方法中不能访问到组件实例this,但是可以使用next里面的vm访问到组件实例,并通过vm.$data获取组件实例上的data数据 getCurrentInstance 是vue3提供的获取组件实例的方法,可通过getCurrentInstanc

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包