详解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 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
jquery下json数组的操作实现代码
Aug 09 Javascript
jQuery中选择器小问题(新人难免遇到)
Mar 31 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
Dec 01 Javascript
jQuery实现的简单拖动层示例
Feb 22 Javascript
jQuery实现遍历复选框的方法示例
Mar 06 Javascript
BetterScroll 在移动端滚动场景的应用
Sep 18 Javascript
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
vue实现简单学生信息管理
May 30 Javascript
关于React Native 无法链接模拟器的问题
Jun 21 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
深入解析php之apc
2013/05/15 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
layui表格实现代码
2017/05/20 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Python中的日期时间处理详解
2016/11/17 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
python3转换code128条形码的方法
2019/04/17 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python目录和文件处理总结详解
2019/09/02 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
中层干部竞争上岗演讲稿
2014/01/13 职场文书
酒店节能减排方案
2014/05/26 职场文书
2014乡镇干部纪律作风整顿思想汇报
2014/09/13 职场文书
信息技术研修心得体会
2016/01/08 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技