vue点击事件动态禁用(vue开发移动端使用better-scroll时click事件失效的解决方案)
vue点击事件动态禁用
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> <li class="wrapper" ref="wrapper" :style="{height:allHeight}"> <slot></slot> </li> </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实现双向数据绑定)
- vue单元测试实例(Vue-Jest 自动化测试基础配置详解)
- vue原样表格导出excel(Vue导出Excel功能的全过程记录)
- vue项目打包上线的方法(vue项目打包以及优化的实现步骤)
- vue使用websocket的详细步骤(vue使用webSocket更新实时天气的方法)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- vue 组件如何转换虚拟dom(Vue源码分析之虚拟DOM详解)
- vue统计代码行数(vue实现计数器简单制作)
- vue项目上线教程(vue项目中使用骨架屏的方法)
- vue左右滑屏(vue中实现全屏以及对退出全屏的监听)
- vue自定义列组件(vue自定义表格列的实现过程记录)
- 小白vue教学(尤大大新活petite-vue的实现)
- vuefor指令使用教程(Vue必学知识点之forEach的使用)
- vue创建项目同时引入elementui(Vue Element前端应用开发之开发环境的准备工作)
- vue elementui 公共列表组件(Vue Element-ui表单校验规则实现)
- vue怎么更换自定义水印(Vue之全局水印的实现示例)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
热门推荐
- dedecms标签怎么用(dedecms建站设置自动内链的方法)
- ftp服务器安装和配置教学设计思路(FTP服务器的主要参数配置讲解)
- docker部署php本地开发环境(CentOS7环境下使用Docker搭建PHP运行环境的过程详解)
- 如何来确定云服务器ecs的操作系统(远程登录Windows系统的ECS实例提示“远程桌面连接已断开”错误的解决方法)
- laravel怎么返回指定列(laravel-admin解决表单select联动时,编辑默认没选上的问题)
- kettle替换sql语句(sql server定时作业调用Kettle job出错的快速解决方法)
- 微信公众号扫码跳转网页(微信公众号实现扫码获取微信用户信息网页授权)
- vs2013快捷键
- sql怎么查询字段合并(SQL函数将某个字段合并在一起的操作)
- 入门云主机推荐(怎么样购买到心仪又便宜的云主机?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9