gui-totop.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <view class="gui-totop gui-fade-in"
  3. hover-class="gui-tap"
  4. v-if="show"
  5. @tap="totop"
  6. :style="{
  7. bottom:bottom,right:right,
  8. backgroundColor:background,zIndex:zIndex,
  9. borderRadius:borderRadius
  10. }">
  11. <text class="gui-icons gui-block-text gui-totop-text"
  12. :style="{
  13. color:color,
  14. fontSize:fontSize
  15. }">&#xe637;</text>
  16. </view>
  17. </template>
  18. <script>
  19. export default{
  20. name : "gui-totop",
  21. props : {
  22. top : { type : Number, default : 0 },
  23. color : { type : String, default : "#008AFF" },
  24. bottom : { type : String, default : "80rpx" },
  25. right : { type : String, default : "30rpx" },
  26. background : { type : String, default : "#FFFFFF"},
  27. borderRadius : { type : String, default : "6rpx" },
  28. zIndex : { type : Number, default : 9},
  29. fontSize : { type : String, default : "44rpx" }
  30. },
  31. data() {
  32. return {
  33. show : false,
  34. timer : null
  35. }
  36. },
  37. watch:{
  38. top : function(topVal){
  39. if(this.timer != null){clearTimeout(this.timer);}
  40. this.timer = setTimeout(()=>{
  41. this.show = topVal > 100 ? true : false;
  42. }, 80);
  43. }
  44. },
  45. methods:{
  46. totop : function(){
  47. // #ifndef APP-NVUE
  48. uni.pageScrollTo({
  49. scrollTop:0,
  50. duration:100
  51. })
  52. // #endif
  53. this.$emit('totop');
  54. }
  55. }
  56. }
  57. </script>
  58. <style scoped>
  59. .gui-totop{width:80rpx; height:80rpx; position:fixed;}
  60. .gui-totop-text{width:80rpx; height:80rpx; line-height:80rpx; font-size:38rpx; text-align:center;}
  61. </style>