详解mpvue scroll-view自动回弹bug解决方案


Posted in Javascript onOctober 01, 2018

表现

设置了scroll-top的scroll-view组件,在组件所在vue实例data发生改变时会自动回弹到最上方

解决方案

打开 node_modules/mpvue/index.js, 在任意位置添加以下两个方法

function calcDiff(holder, key, newObj, oldObj) {
 if (newObj === oldObj || newObj === undefined) {
  return
 }

 if (newObj == null || oldObj == null || typeof newObj !== typeof oldObj) {
  holder[key] = newObj
 } else if (Array.isArray(newObj) && Array.isArray(oldObj)) {
  if (newObj.length === oldObj.length) {
   for (var i = 0, len = newObj.length; i < len; ++i) {
    calcDiff(holder, key + '[' + i + ']', newObj[i], oldObj[i])
   }
  } else {
   holder[key] = newObj
  }
 } else if (typeof newObj === 'object' && typeof oldObj === 'object') {
  var newKeys = Object.keys(newObj)
  var oldKeys = Object.keys(oldObj)

  if (newKeys.length !== oldKeys.length) {
   holder[key] = newObj
  } else {
   var allKeysSet = Object.create(null)
   for (var i = 0, len = newKeys.length; i < len; ++i) {
    allKeysSet[newKeys[i]] = true
    allKeysSet[oldKeys[i]] = true
   }
   if (Object.keys(allKeysSet).length !== newKeys.length) {
    holder[key] = newObj
   } else {
    for (var i = 0, len = newKeys.length; i < len; ++i) {
     var k = newKeys[i]
     calcDiff(holder, key + '.' + k, newObj[k], oldObj[k])
    }
   }
  }
 } else if (newObj !== oldObj) {
  holder[key] = newObj
 }
}

function diff(newObj, oldObj) {
 var keys = Object.keys(newObj)
 var diffResult = {}
 for (var i = 0, len = keys.length; i < len; ++i) {
  var k = keys[i]
  var oldKeyPath = k.split('.')
  var oldValue = oldObj[oldKeyPath[0]]
  for (var j = 1, jlen = oldKeyPath.length; j < jlen && oldValue !== undefined; ++j) {
   oldValue = oldValue[oldKeyPath[j]]
  }
  calcDiff(diffResult, k, newObj[k], oldValue)
 }
 return diffResult
}

2.找到 throttleSetData 修改为

var throttleSetData = throttle(function (page, data) {
 page.setData(diff(data, page.data));
}, 50);

3.找到 updateDataToMP 方法, 将 throttleSetData 的调用方式改为

throttleSetData(page, data);

希望官方早日修复,参考:

使用脏检查优化每次更新数据时都会传输大量数据的问题, 解决删除回退, 列表忽然滚动到顶部等问题

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
jQuery焦点图切换简易插件制作过程全纪录
Aug 27 Javascript
jquery单选框radio绑定click事件实现方法
Jan 14 Javascript
jquery隔行换色效果实现方法
Jan 15 Javascript
JS实现超简单的鼠标拖动效果
Nov 02 Javascript
angularJS 如何读写缓冲的方法(推荐)
Aug 06 Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 Javascript
js实现导航吸顶效果
Feb 24 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
使用react render props实现倒计时的示例代码
Dec 06 Javascript
vue npm install 安装某个指定的版本操作
Aug 11 Javascript
antd table按表格里的日期去排序操作
Nov 17 Javascript
在create-react-app中使用sass的方法示例
Oct 01 #Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 #Javascript
Vue 组件封装 并使用 NPM 发布的教程
Sep 30 #Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 #Javascript
angularJs中$scope数据序列化的实例
Sep 30 #Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 #Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 #Javascript
You might like
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
JS自动缩小超出大小的图片
2012/10/12 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
AngularJS自定义指令实现面包屑功能完整实例
2017/05/17 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
2019/04/04 Javascript
实例讲解React 组件
2020/07/07 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python基于pillow判断图片完整性的方法
2016/09/18 Python
Sublime开发python程序的示例代码
2018/01/24 Python
Python多进程写入同一文件的方法
2019/01/14 Python
Pytorch之保存读取模型实例
2019/12/30 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
初中生学习的自我评价
2013/11/14 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL