vue开发移动端使用better-scroll时click事件失效的解决方案

 更新时间:2021年07月08日 11:59:01   作者:Elsa_Panda  
这篇文章主要介绍了vue开发移动端使用better-scroll时click事件失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

最近使用vue学习开发移动端的项目,使用了better-scroll插件做滚动。

在引入better-scroll的组件中使用@click事件的时候,点击事件失效,v-on:click、v-bind:click、@click.native都不行,试了一下@touchstart是却是可以的,发现better-scroll的配置中没有设置click:true,设置过之后click事件成功。

后来在使用vuex的时候一直报

[vuex] unknown mutation type: changeCity

才发现在store文件中将mutations写在了state里面,被自己蠢哭了。。。

正确写法如下:

vue better-scroll的封装以及使用

相信做一些移动端项目,很多都用了better-scroll这个滚动插件,它能让我们页面的滚动变得不那么僵硬,同时也能让我们实现一些锚点等功能更简单

注:这个插件只有当你要滚动的内容高度大于你的父盒子的高度才行

首先就npm安装这个插件了

npm i better-scroll --save

接着我们封装一个Better组件,这样在全局都能复用

<template>
  <div class="wrapper" ref="wrapper" :style="{height:allHeight}">
   <slot></slot>
  </div>
</template>

<script>
import BScroll from 'better-scroll'
export default {
  data() {
    return {
      allHeight:''
    }
  },
  props:{
    handleToScroll:{
      type:Function,
      default:function(){}
    },
    handleToTouchEnd:{
      type:Function,
      default:function(){}
    }
  },
  methods: {
    handleToScrolltop(y){
      this.scroll.scrollTo(0,y)
    }
  },
  mounted() {
    var scroll = new BScroll(this.$refs.wrapper,{
      tap:true,
      probeType:1
    })
    this.scroll = scroll
     scroll.on('scroll',(pos)=>{
       this.handleToScroll(pos)
     })
     scroll.on('touchEnd',(pos)=>{
       this.handleToTouchEnd(pos)
     })

  let dangqian = this.$refs.wrapper.offsetTop
  let zongaodu = document.documentElement.clientHeight
  let all = zongaodu-dangqian
  this.allHeight = all +"px"
  },
}
</script>
<style>
</style>   

动态绑定allHeight是为了让父盒子的高度永远为它到页面最底部的高度,通过计算出来,这样更有利于实现

同时封装两个方法,一个scroll是下拉刷新方法,touchEnd则是下拉刷新之后触发的函数,也有很多其他的方法,例如上拉加载更多等等,可以去官网文档中查看

接下来全局注册这个组件,在main.js中

import Scroller from './components/content/Scroller'
Vue.component('Scroller',Scroller)

在其他组件使用

比如我们想让ul标签里面的内容有滚动效果,就可以这样写

 <Scroller>
 <ul>
 </ul>
</Scroller>

想用封装的方法,通过props通信即可

<Scroller :handleToScroll="handleToScroll" :handleToTouchEnd="handleToTouchEnd">

这样页面就有这个滚动效果了,但是要注意,它会覆盖我们很多的原生方法,但是他对应的也有解决方法,用它内部的属性,我举个例子,就比如页面的锚点跳转

我在封装的组件里写了一个方法,就是让y轴随着移动

  methods: {
     handleToScrolltop(y){
       this.scroll.scrollTo(0,y)
     }
   },

怎么使用呢?

在要使用的页面通过调用这个方法

handleToScrolltop(),括号里面放上对应的offsetTop即可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中获取图片高度的两种方法

    Vue中获取图片高度的两种方法

    在使用Vue2开发移动端页面的时候,需要做一个效果,实现的方案是背景渐变,但是想要实现这个效果就必须进行定位,我的背景高度需要在一个十分恰当的位置,但是我的图片会随着移动端页面的变化而发生高度的变化,为什么会变化?所以本文介绍了Vue中获取图片高度的方法
    2024-08-08
  • vue3使用echarts并封装echarts组件方式

    vue3使用echarts并封装echarts组件方式

    这篇文章主要介绍了vue3使用echarts并封装echarts组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 优化Vue页面中的表单布局和样式的技巧

    优化Vue页面中的表单布局和样式的技巧

    在日常开发中,Vue 项目中的表单布局和样式优化是一个重要的环节,通过合理的布局与美观的样式设计,不仅可以提升用户体验,还能增加页面的实用性和观赏性,本文将总结几个常见的表单和表格布局优化的技巧,需要的朋友可以参考下
    2024-10-10
  • vue3如何获取绑定页面dom元素

    vue3如何获取绑定页面dom元素

    这篇文章主要介绍了vue3如何获取绑定页面dom元素问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Vue项目中最新用到的一些实用小技巧

    Vue项目中最新用到的一些实用小技巧

    这篇文章主要给大家介绍了关于Vue项目中最新用到的一些实用小技巧,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 详解Vue 2中的  initState 状态初始化

    详解Vue 2中的  initState 状态初始化

    这篇文章主要介绍了详解Vue 2中的initState状态初始化,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • vue3 选中对话框时对话框右侧出一个箭头效果

    vue3 选中对话框时对话框右侧出一个箭头效果

    本文主要介绍了Vue3实现选中对话框带箭头效果的方法,首先通过后台获取数据进行遍历,利用ts代码判断选中下标与循环游标是否一致以改变样式,感兴趣的朋友一起看看吧
    2024-10-10
  • antd vue中,如何在form表单中的自定义组件使用v-decorator

    antd vue中,如何在form表单中的自定义组件使用v-decorator

    antd vue中,在form表单中的自定义组件使用v-decorator问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 浅谈validator自定义验证及易错点

    浅谈validator自定义验证及易错点

    这篇文章主要介绍了validator自定义验证及易错点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 关于element ui的菜单default-active默认选中的问题

    关于element ui的菜单default-active默认选中的问题

    这篇文章主要介绍了关于element ui的菜单default-active默认选中的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论