详解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 相关文章推荐
JsDom 编程小结
Aug 09 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
Dec 11 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
js动态改变select选择变更option的index值示例
Jul 10 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
Oct 30 Javascript
对jQuary选择器的全面总结
Jun 20 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
Dec 05 Javascript
Nuxt.js实战详解
Jan 18 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
对node.js中render和send的用法详解
May 14 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 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
PHP 清空varnish 缓存的详解(包括指定站点下的)
2013/06/20 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
checkbox选中与未选中判断示例
2014/08/04 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
2015/03/13 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
jQuery实现分隔条左右拖动功能
2015/11/21 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
使用yeoman构建angular应用的方法
2017/08/14 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
[02:36]DOTA2亚洲邀请赛小组赛精彩集锦:EE凭借法力虚空拿下4杀
2017/03/30 DOTA
Django实现快速分页的方法实例
2017/10/22 Python
Python 忽略warning的输出方法
2018/10/18 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
车间机修工岗位职责
2014/02/28 职场文书
关于长城的导游词
2015/01/30 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
党员干部学习心得体会
2016/01/23 职场文书