添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
import throttle from 'throttle-debounce/throttle' ; const cubic = value => Math . pow ( value , 3 ) ; const easeInOutCubic = value => value < 0.5 ? cubic ( value * 2 ) / 2 : 1 - cubic ( ( 1 - value ) * 2 ) / 2 ; export default { name : 'GoTopAndBottom' , props : { goTopVisibilityHeight : { type : Number , default : 200 tobotVisibilityHeight : { type : Number , default : 200 target : [ String ] , right : { type : Number , default : 40 bottom : { type : Number , default : 40 data ( ) { return { el : null , container : null , toTopVisible : false , toBottomVisible : true , computed : { styletopBottom ( ) { return ` ${ this . bottom + 20 } px ` ; styleRight ( ) { return ` ${ this . right } px ` ; stylebotBottom ( ) { return ` ${ this . bottom - 20 } px ` ; mounted ( ) { this . init ( ) ; this . throttledScrollHandler = throttle ( 300 , this . onScroll ) ; this . container . addEventListener ( 'scroll' , this . throttledScrollHandler ) ; this . onScroll ( ) ; methods : { init ( ) { this . container = document ; this . el = document . documentElement ; if ( this . target ) { this . el = document . querySelector ( this . target ) ; if ( ! this . el ) { throw new Error ( ` target is not existed: ${ this . target } ` ) ; this . container = this . el ; onScroll ( ) { const scrollTop = this . el . scrollTop ; this . toTopVisible = scrollTop >= this . goTopVisibilityHeight ; this . toBottomVisible = ( scrollTop + document . documentElement . clientHeight ) <= ( this . el . scrollHeight - this . tobotVisibilityHeight ) ; handleTopClick ( e ) { this . scrollToTop ( ) ; this . $emit ( 'toTopClick' , e ) ; handleBottomClick ( e ) { this . scrollToTBottom ( ) ; this . $emit ( 'toBotClick' , e ) ; scrollToTop ( ) { const el = this . el ; const beginTime = Date . now ( ) ; const beginValue = el . scrollTop ; const rAF = window . requestAnimationFrame || ( func => setTimeout ( func , 16 ) ) ; const frameFunc = ( ) => { const progress = ( Date . now ( ) - beginTime ) / 500 ; if ( progress < 1 ) { el . scrollTop = beginValue * ( 1 - easeInOutCubic ( progress ) ) ; console . log ( beginValue ) ; rAF ( frameFunc ) ; } else { el . scrollTop = 0 ; rAF ( frameFunc ) ; scrollToTBottom ( ) { const el = this . el ; const beginTime = Date . now ( ) ; const beginValue = el . scrollTop ; const endScrollTop = el . scrollHeight - document . documentElement . clientHeight ; const rAF = window . requestAnimationFrame || ( func => setTimeout ( func , 16 ) ) ; const frameFunc = ( ) => { const progress = ( Date . now ( ) - beginTime ) / 500 ; if ( progress < 1 ) { el . scrollTop = ( endScrollTop - beginValue ) * easeInOutCubic ( progress ) + beginValue ; rAF ( frameFunc ) ; } else { el . scrollTop = endScrollTop ; rAF ( frameFunc ) ; beforeDestroy ( ) { this . container . removeEventListener ( 'scroll' , this . throttledScrollHandler ) ; </ script >

这部分有可能会出现编译错误
在这里插入图片描述
根据网上的解决方案添加如下的文件和代码,但是好像没什么用…
在这里插入图片描述

  1. 使用该组件
    在这里插入图片描述

在这里插入图片描述
效果:
在这里插入图片描述
使用说明
部分说明请看官方文档 element-ui el-backtop
组件改造后使用具名插槽,
top按钮使用 solt=“top”,bottom按钮使用 solt=“bottom”
在这里插入图片描述
子组件事件
@toTopClick 点击回到顶部按钮触发
@toBotClick 点击拉到底部按钮触发
在这里插入图片描述
按钮间距
在这里插入图片描述

若需要更多功能可继续扩展

element - ui 中的backtop返回顶部组件的使用 最近写的项目中用到了 vue element - ui 实现前端页面,在最后写到返回顶部的时候,看到有自带的组件就直接使用了,但是在copy代码进去之后发现没生效。 找了不少文章,有些是直接copy了官方的文档,有的是给出了 解决方案,但是没有说明,有点看不懂到底要怎么弄。 最后的最后,我差点就自己写原生。 最终因为懒就没有自己写。 所以我仔细观察...
<template> Scroll down to see the bottom-right button. < el -backtop target=".page-component__scroll . el -scrollbar__wrap"></ el -backtop> </template> target:指向需要
<template> < el -tooltip placement="top" content="回到顶部"> <back-to-top :custom-style="myBackToTopStyle" :visibility-height="300" :back-position="0" transition-name="fade"/> </ el -tooltip> </template>
我在用 element - ui 导航栏出现如下问题原因是我用div包裹住了导航栏,而div有个margin-top:90px就会这样。删掉就行。 <div style="margin-top:90px;height:500px"> < el -menu>导航栏</ el -menu> 还有第二种情况,在导航栏上面也会加div,div有margin-top:90px也会这带导致导航栏异常。 <div style="margin-top:90px;he
setTimeout(() => { this.showScrollTop = document.body.scrollTop + document.document Element .scrollTop + document.body.clientHeight > document.body.clientHeight // this
< el -popover placement="bottom" width="400" trigger="click"> <ul class="infinite-list" v-infinite-scroll="load" style="overflow:auto;height:100px;"> <li v-for="(item,index) in list" class="infinite-list-item" :key="index">{{.
<div class="pages-content-scroll"> < el -backtop target=".pages-content-scroll" :visibility-height="visibleHeight" <template> <div class="box"> < el -backtop target=".box" :visibility-height="100" :bottom="60" :right="20"></ el -backtop> 页面........ </template> 有时候会发现这个根本无效,那么父级盒子最好设