Android浮層點擊穿透問題


  最近做微信公眾號開發的時候遇到一個問題,上線后發現此問題后檢查代碼沒有發現問題,無奈只能回滾到上一個版本。

  問題是這樣的:頁面一個選擇的浮層,在浮層點擊確定后,下面的頁面會自動提交

  

  在測試環境上無法重現,也不可能用正式環境測試問題,百撕不得騎姐之際,突然想到這個現象十分像JS冒泡,當然不是JS冒泡,那會不會是點了這個確定觸發了下面的提交,測試環境沒問題是因為測試環境由於數據原因,提交按鈕剛好沒在確定下面。

  這個容易,造數據驗證,果然猜對了。剩下的就好辦了,在浮層還在的時候鎖掉下面的提交就好了。

  這個浮層是由mobiscroll.scroller控件產生的,去翻文檔,發現特別慢,懶得翻牆就看了下控件的源碼。

  找到了浮層打開前的事件:onBeforeShow;又找到了選擇事件,同時因為需要顯示的值和控件原本的不同,就直接改代碼了:

  

/**
        * Set button handler.
        */
        that.select = function () {
            if (that.hide(false, 'set') !== false) {
                setValue(true, true, 0, true);
                var showText = that.getValue();
                if(showText.length>12){
                    var text = showText.slice(0,11);
                    showText = text + "...";
                }
                /*event('onSelect', [that.val]);改為顯示值*/
                event('onSelect', [showText]);
                /*加個事件*/
                event('onEndSelect', [showText]);
            }
        };

        /**
        * Cancel and hide the scroller instance.
        */
        that.cancel = function () {
            if (that.hide(false, 'cancel') !== false) {
                event('onCancel', [that.val]);
                event('onEndSelect', [that.val]);
            }
        };

  掉用處的代碼:

        var opt = {
            'select-opt': {
                preset: 'select',
                group: true,
                width: 50
                ,onBeforeShow:function(){
                    lockSure = true;
                }
                ,onClose:function(){
                    setTimeout('lockSure = false;',400);
                }
                ,onEndSelect:function(){
                    setTimeout('lockSure = false;',330);
                }
            }
        };

  上面onClose是同事連VPN后在文檔中找到的事件,不過發現直接在事件中設置鎖定變量值是不行的,只好延遲一下執行。經過測試,在手機反應比較慢時onClose在400毫秒時或選擇結束時延遲330毫秒基本可以保證執行正常,選擇結束效果產生會快一點,onClose的效果會比我加的事件處理全面一些,所以兩個都保留了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM