那些年,mui.picker给你的伤痛都在这里!

移动端开发,我选mui。

移动端选择框插件,时间选择插件,我选mui.picker。

但是,它的坑,你踩过几次呢。

我不知道你踩过几次,我只知道我就踩过一个坑。对的,只有一个,反馈给官方,也没看到优化和修缮。

能咋办,自食其力吧,我就自己搞了一个修缮版本的mui.picker.min.js。

坑是啥

这个事情是这样的:页面使用了选择器,然后第一次使用选择器后再马上点击页面的任意一个输入框,在输入框获取焦点弹出输入法的时候页面会出现滚动条,这个时候上拉滚动会出现选择器插件。这个是个bug,bug,bug....

坑怎么来的

这个事情是这样的:当我们点击选择器,弹出选择器,然后再点击页面的任意一个输入框,这个过程没有调用选择器关闭事件当我们使用选择器的时候,可以在选择器右上方看到关闭或者完成按钮,这个按钮就是关闭选择器的作用)。原来是这么个问题。

怎么填坑

这个事情是这样的:坑是因为插件在失去焦点的时候不能自动关闭,所以只要在失去焦点的时候让它关闭就可以填坑了。

失去焦点契机

这个事情是这样的:我们懂的关闭选择器,但是什么时候关闭,所以我们需要了解选择器什么时候失去焦点。分析下,只有输入框和文本框才有机会让选择器失去焦点,好,找到契机了。

填坑动作

所以,只要在每个页面里头,给每个input和textarea绑定获取焦点的事件,在获取焦点的时候,关闭选择器,问题就解决了。

填坑代码

因为是要给mui.picker做补丁,而且要侵入mui-picker的源码,所以我就直接在mui.picker.js里头直接添加补丁。主要补丁代码如下(下面只是部分补丁代码,还有部分需要写入mui.picker的源码里头):

/**
 * picker补丁,部分补丁放在原始的picker的插件代码里头
  * 扫地僧 20190401
 */
var futurePicker = {};
/**
 * 给当前页面的所有的input textarea对象添加获得焦点监听事件
 */
futurePicker.pickerList = function() {
    var inputList = document.getElementsByTagName("input");
    var textareaList = document.getElementsByTagName("textarea");
    if (inputList) {
        for (var i = 0, l = inputList.length; i < l; i++) {
            inputList[i].onfocus = function() {
                futurePicker.hidePicker()
            }
        }
    }
    if (textareaList) {
        for (var i = 0, l = textareaList.length; i < l; i++) {
            textareaList[i].onfocus = function() {
                futurePicker.hidePicker()
            }
        }
    }
}

/**
 * 隐藏所有的picker对象
 */
futurePicker.hidePicker = function() {
    var pickerObjList = document.querySelectorAll(".mui-poppicker");
    if (pickerObjList) {
        for (var i = 0, l = pickerObjList.length; i < l; i++) {
            pickerObjList[i].style.visibility = "hidden";
        }
    }

    var dtPickerObjList = document.querySelectorAll(".mui-dtpicker");
    if (dtPickerObjList) {
        for (var i = 0, l = dtPickerObjList.length; i < l; i++) {
			 dtPickerObjList[i].style.visibility = "hidden";
        }
    }
}
// 启动补丁
futurePicker.pickerList();

附件

添加了补丁之后的mui.picker.js点击下载

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章