zoukankan      html  css  js  c++  java
  • MUI poppicker.js 增加搜索框

    //修改popicker.js
    
    (function ($, document) {
    
    //创建 DOM
    $.dom = function (str) {
    if (typeof (str) !== 'string') {
    if ((str instanceof Array) || (str[0] && str.length)) {
    return [].slice.call(str);
    } else {
    return [str];
    }
    }
    if (!$.__create_dom_div__) {
    $.__create_dom_div__ = document.createElement('div');
    }
    $.__create_dom_div__.innerHTML = str;
    return [].slice.call($.__create_dom_div__.childNodes);
    };
    
    var panelBuffer = '<div class="mui-poppicker">
    <div class="mui-poppicker-header">
    <button class="mui-btn mui-poppicker-btn-cancel">取消</button>
    <input type="search" class="popickeri-search" placeholder="请输入搜索内容"> 
    <button class="mui-btn mui-btn-blue mui-poppicker-btn-ok theme_color theme_border">确定</button>
    <div class="mui-poppicker-clear"></div>
    </div>
    <div class="mui-poppicker-body">
    </div>
    </div>';
    
    var pickerBuffer = '<div class="mui-picker">
    <div class="mui-picker-inner">
    <div class="mui-pciker-rule mui-pciker-rule-ft"></div>
    <ul class="mui-pciker-list">
    </ul>
    <div class="mui-pciker-rule mui-pciker-rule-bg"></div>
    </div>
    </div>';
    
    //定义弹出选择器类
    var PopPicker = $.PopPicker = $.Class.extend({
    //构造函数
    init: function (options) {
    var self = this;
    self.options = options || {};
    self.options.buttons = self.options.buttons || ['取消', '确定'];
    self.panel = $.dom(panelBuffer)[0];
    document.body.appendChild(self.panel);
    self.ok = self.panel.querySelector('.mui-poppicker-btn-ok');
    self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');
    self.body = self.panel.querySelector('.mui-poppicker-body');
    self.mask = $.createMask();
    self.cancel.innerText = self.options.buttons[0];
    self.ok.innerText = self.options.buttons[1];
    if(self.options.search){
    self.search = self.panel.querySelector('.popickeri-search');
    self.search.addEventListener('tap', function (event) {
    self.search.focus() 
    }, false);
    self.search.addEventListener('input', function (event) {
    var iptVal=this.value
    var pickersData = self.pickersData.filter(function(o){
    return o.text.includes(iptVal)
    })
    self.setData(pickersData)
    }, false);
    }
    else{
    self.panel.querySelector('.popickeri-search').remove()
    }
    self.cancel.addEventListener('tap', function (event) {
    self.hide();
    }, false);
    self.ok.addEventListener('tap', function (event) {
    if (self.callback) {
    var rs = self.callback(self.getSelectedItems());
    if (rs !== false) {
    self.hide();
    }
    }
    }, false);
    self.mask[0].addEventListener('tap', function () {
    self.hide();
    }, false);
    self._createPicker();
    //防止滚动穿透
    self.panel.addEventListener($.EVENT_START, function (event) {
    event.preventDefault();
    }, false);
    self.panel.addEventListener($.EVENT_MOVE, function (event) {
    event.preventDefault();
    }, false);
    },
    _createPicker: function () {
    var self = this;
    var layer = self.options.layer || 1;
    var width = (100 / layer) + '%';
    self.pickers = [];
    for (var i = 1; i <= layer; i++) {
    var pickerElement = $.dom(pickerBuffer)[0];
    pickerElement.style.width = width;
    self.body.appendChild(pickerElement);
    var picker = $(pickerElement).picker();
    self.pickers.push(picker);
    pickerElement.addEventListener('change', function (event) {
    var nextPickerElement = this.nextSibling;
    if (nextPickerElement && nextPickerElement.picker) {
    var eventData = event.detail || {};
    var preItem = eventData.item || {};
    nextPickerElement.picker.setItems(preItem.children);
    }
    }, false);
    }
    },
    //填充数据
    setData: function (data) {
    var self = this;
    data = data || [];
    self.pickersData = self.pickersData || data
    self.pickers[0].setItems(data);
    },
    //获取选中的项(数组)
    getSelectedItems: function () {
    var self = this;
    var items = [];
    for (var i in self.pickers) {
    var picker = self.pickers[i];
    items.push(picker.getSelectedItem() || {});
    }
    return items;
    },
    //显示
    show: function (callback, cancelCB) {
    var self = this;
    self.callback = callback;
    self.cancelCB = cancelCB;
    self.mask.show();
    document.body.classList.add($.className('poppicker-active-for-page'));
    self.panel.classList.add($.className('active'));
    //处理物理返回键
    self.__back = $.back;
    $.back = function () {
    self.hide();
    };
    },
    //隐藏
    hide: function () {
    var self = this;
    if (self.disposed) return;
    self.panel.classList.remove($.className('active'));
    self.mask.close();
    if (self.cancelCB) { // 添加判断,兼容不传第二个参数的情况
    self.cancelCB();
    }
    document.body.classList.remove($.className('poppicker-active-for-page'));
    //处理物理返回键
    $.back = self.__back;
    },
    dispose: function () {
    var self = this;
    self.hide();
    setTimeout(function () {
    self.panel.parentNode.removeChild(self.panel);
    for (var name in self) {
    self[name] = null;
    delete self[name];
    };
    self.disposed = true;
    }, 300);
    }
    });
    
    })(mui, document);
    
    //需要搜索框则传search:true
    
    new $.PopPicker({search:true});
    
    //文本框样式
    
    <style type="text/css">
    .popickeri-search{
     60% !important;
    margin-left: 5%;
    height: .65rem !important;
    background: #fff !important;
    border:1px solid #ddd !important;
    }
    </style>
    

      

  • 相关阅读:
    指针传递的一些必要的记录,避免以后又忘记了。
    记录下这几个FMX控件的地址
    boost.ASIO-可能是下一代C++标准的网络库
    对本程序使用自己的代理服务器
    C# 为网络程序添加用户代理
    InternetOpen怎么使用代理
    改变代理服务器
    在Delphi中,关于数组名称
    Delphi 获取进程路径及命令行参数
    关于在asp.net的web页面中的全局变量问题
  • 原文地址:https://www.cnblogs.com/HCXiao/p/14816566.html
Copyright © 2011-2022 走看看