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

 更新时间:2018年08月31日 08:30:41   作者:xxxsimons  
这篇文章主要介绍了详解小程序输入框闪烁BUG解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前言

本人所说的小程序,都是基于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的出错原因即初步解决方案,仅供参考

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

微信官方字体规范如下:


修改后的加粗效果如下:


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

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

相关文章

  • View.post() 不靠谱的地方你知道多少

    View.post() 不靠谱的地方你知道多少

    本文给大家分享了view.post()方法不靠谱的地方,以及post在7.0中的差异,需要的的朋友参考下本文吧
    2017-08-08
  • javascript中for/in循环及使用技巧

    javascript中for/in循环及使用技巧

    如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的,本篇文章给大家介绍javascript中for/in循环及使用技巧 ,需要的朋友可以参考下
    2015-09-09
  • 小程序自定义tab-bar踩坑实战记录

    小程序自定义tab-bar踩坑实战记录

    这篇文章主要给大家介绍了关于小程序自定义tab-bar踩坑实战的相关资料,包括下载代码、放置文件、修改JS文件、配置app.json和隐藏原生导航栏等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • js中array的sort()方法使用介绍

    js中array的sort()方法使用介绍

    默认的sort方法并不是按照整形数据来排序,而是用的字符串匹配方式,下面有个不错的示例,大家可以参考下
    2014-02-02
  • JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析

    JS Object.preventExtensions(),Object.seal()与Object.freeze()用

    这篇文章主要介绍了JS Object.preventExtensions(),Object.seal()与Object.freeze()用法,结合实例形式分析了javascript控制对象扩展、密封、冻结等相关函数与操作技巧,需要的朋友可以参考下
    2018-08-08
  • js实现炫酷的左右轮播图

    js实现炫酷的左右轮播图

    这篇文章主要为大家详细介绍了基于JavaScript实现左右轮播图的具体代码,具有一定的参考价值,感兴趣的朋友可以参考一下
    2017-01-01
  • 浅谈JavaScript 代码简洁之道

    浅谈JavaScript 代码简洁之道

    这篇文章主要介绍了浅谈JavaScript 代码简洁之道,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • 详解组件库的webpack构建速度优化

    详解组件库的webpack构建速度优化

    这篇文章主要介绍了详解组件库的webpack构建速度优化,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • js实现图片在未加载完成前显示加载中字样

    js实现图片在未加载完成前显示加载中字样

    首先判断浏览器再判断图片是否加载完成,如果还未加载就显示“加载中...”,思路及代码如下
    2014-09-09
  • 一文详解DOM的概念和常用操作

    一文详解DOM的概念和常用操作

    本文详细介绍了DOM的概念和常用操作,文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口。它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容,感兴趣的朋友可以参考阅读本文
    2023-04-04

最新评论