详解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对象的三个方法小结
Jan 12 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
Sep 14 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
jQuery中ScrollTo用法示例
Sep 04 Javascript
详解vue组件化开发-vuex状态管理库
Apr 10 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
Dec 12 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 Javascript
JavaScript实现点击切换验证码及校验
Jan 10 Javascript
详解Vue中$props、$attrs和$listeners的使用方法
Feb 18 Vue.js
在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 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
javascript的事件描述
2006/09/08 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
Cookie 小记
2010/04/01 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
javascript关于继承解析
2016/05/10 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
virtualenv介绍及简明教程
2020/06/23 Python
ECCO爱步美国官网:来自丹麦的鞋履品牌
2016/11/23 全球购物
元旦晚会邀请函
2014/02/01 职场文书
个人党性剖析材料
2014/02/03 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
服务承诺书怎么写
2014/05/24 职场文书
建筑结构施工求职信
2014/07/11 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
放假通知
2015/04/14 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS