详解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 相关文章推荐
Javascript对象中关于setTimeout和setInterval的this介绍
Jul 21 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
May 24 Javascript
bootstrap table复杂操作代码
Nov 01 Javascript
js实现添加删除表格(两种方法)
Apr 27 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
Mar 02 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
vue构建动态表单的方法示例
Sep 22 Javascript
JS实现的杨辉三角【帕斯卡三角形】算法示例
Feb 26 Javascript
vue设置默认首页的操作
Aug 12 Javascript
JavaScript实现班级抽签小程序
May 19 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
Protoss建筑一览
2020/03/14 星际争霸
VFP与其他应用程序的集成
2006/10/09 PHP
屏蔽浏览器缓存另类方法
2006/10/09 PHP
Views rows style模板重写代码
2011/05/16 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
php删除数组中重复元素的方法
2015/12/22 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
发现的以前不知道的函数
2006/09/19 Javascript
JS宝典学习笔记(下)
2007/01/10 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
2016/06/25 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
Python实现迭代时使用索引的方法示例
2018/06/05 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
python语言中有算法吗
2020/06/16 Python
pandas 数据类型转换的实现
2020/12/29 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
Stio官网:男女、儿童户外服装
2019/12/13 全球购物
四年级数学教学反思
2014/02/02 职场文书
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
寒假家长评语大全
2014/04/16 职场文书
长城的导游词
2015/01/30 职场文书
财务会计岗位职责
2015/02/03 职场文书
如何用python插入独创性声明
2021/03/31 Python
pytorch实现手写数字图片识别
2021/05/20 Python