详解小程序输入框闪烁及重影BUG解决方案


Posted in Javascript onAugust 31, 2018

前言

本人所说的小程序,都是基于mpvue框架而上的,因此BUG可能是原生小程序的,也有可能是mpvue的。

问题描述

在小程序input组件中,如果使用v-model进行双向绑定,在输入时会出现光标闪烁的BUG。

原因

造成这个BUG的原因,是因为在原生小程序input组件上,进行了封装。才导致光标闪烁的问题。

解决方案

这里提供了两种解决方案。各有各的优势,请选取合适的方案:

一、弃用v-model,使用@input

适用于input组件单纯是用户手动输入的,而没有像授权获取手机号,然后自动填入input组件中。这种需要赋予初始value的情况。即适用于单向绑定,而不是双向绑定。

/** 
* 父组件
*/

// html
<childInput @input="onInput"/> <-- 注意这里不能使用:value=value赋予初始值,否则又会出现闪烁的BUG,因为此时就等同于v-model了

// js
import ChildInput from './ChildInput'
export default {
 components:{ ChildInput },
 data(){
 return {
  value:''
 }
 },
 methods(){
 onInput(e){
  this.value = e 
 }
 }
}

/** 
* 子组件 ChildInput
*/

// html

<input @input="$emit('input',$event)"/>

二、不封装input组件,直接使用v-model

这种情况就是可以直接双向绑定的了。具体原因还不清楚,可能是本身原生小程序的BUG。

/**
* 父组件,不使用封装的子组件,直接使用原生组件。
*/

// html
<input v-model="value"/>

// js
export default {
 data(){
 return {
  value:''
 }
 }
}

问题描述:输入框文字出现重影,如下

详解小程序输入框闪烁及重影BUG解决方案

输入框 在失去焦点和获得焦点的切换过程中,能清晰的看到输入框的问题的重影现象,如上图,经过一番折腾,我找到bug的出错原因即初步解决方案,仅供参考

1、微信官方设计文档给出了字体大小的规范,最小11pt,我自己设的是10pt,将其改成11pt之后,部分输入框不再出现重影,而是微信官方渲染的加粗效果

微信官方字体规范如下:

详解小程序输入框闪烁及重影BUG解决方案

修改后的加粗效果如下:

详解小程序输入框闪烁及重影BUG解决方案

3、还有的输入框扔会出现重影,细看,再继续研究,发现是因为,flex布局,使得,输入框的长度不一致,我把输入框调成一样宽度就可以,不过我也不知道具体为什么,你们可以试试

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

Javascript 相关文章推荐
JavaScript 学习笔记(四)
Dec 31 Javascript
8个实用的jQuery技巧
Mar 04 Javascript
php+js实现倒计时功能
Jun 02 Javascript
jQuery地图map悬停显示省市代码分享
Aug 20 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
Oct 15 Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 Javascript
vue自定义指令directive的使用方法
Apr 07 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
JS正则表达式验证端口范围(0-65535)
Jan 06 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 02 Javascript
javascript闭包的使用之按钮切换功能
Aug 30 #Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 #Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 #Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 #Javascript
vue-router动态设置页面title的实例讲解
Aug 30 #Javascript
解决vue select当前value没有更新到vue对象属性的问题
Aug 30 #Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 #Javascript
You might like
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
使用PHP的日期与时间函数技巧
2008/04/24 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
小程序转发探索示例
2019/02/19 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
Django密码系统实现过程详解
2019/07/19 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
解决html5中的video标签ios系统中无法播放使用的问题
2020/08/10 HTML / CSS
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
生物制药毕业生自荐信
2013/10/16 职场文书
银行优秀员工事迹
2014/02/06 职场文书
红旗方阵解说词
2014/02/12 职场文书
高中军训感言600字
2014/03/11 职场文书
应届大学生自荐书
2014/06/17 职场文书
先进单位事迹材料
2014/12/25 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript