Mui --- 事件管理及自定義事件詳解


<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="css/mui.min.css" rel="stylesheet" />
        <script src="js/mui.min.js"></script>
        <script type="text/javascript">
            mui.init()
            mui.plusReady(function(){
                //addEventListener 有兩個參數,一個是你要做是什么(事件),二是具體的操作
                document.getElementById('btn1').addEventListener('tap',function(){
                    mui.toast('Ok');
                });
                
                //on元素批量綁定事件
                mui('#list1').on('tap','li',function(){
                    //mui.toast('Ok');
                    //獲取點擊的內容
                    //這個this代表點擊那個li
                    mui.toast(this.innerHTML);
                });
                
                //off去掉事件
                mui('#list1').off('tap','li');
                
                 
                
            });
            
            
        </script>
    </head>

    <body>
        <div class="mui-content">
            <button id="btn1" type="button" class="mui-btn mui-btn-blue mui-btn-block">按鈕</button>
            <ul class="mui-table-view" id="list1">
                <li class="mui-table-view-cell">1</li>
                <li class="mui-table-view-cell">2</li>
                <li class="mui-table-view-cell">3</li>
                <li class="mui-table-view-cell">4</li>
                <li class="mui-table-view-cell">5</li>
            </ul>
        </div>
    </body>

</html>

 

    <script type="text/javascript">
            mui.init()
            mui.plusReady(function(){
                 //如果用mui給btn綁定事件,這樣是不行的
//                 mui('#btn1').addEventListener('tap',function(){
//                     mui.toast('ok');
//                 })
                //必須要用
                document.getElementById('btn1').addEventListener('tap',function(){
                    mui.toast('ok');
                });
            });
            
            
        </script>
    </head>

 事件觸發

使用mui.trigger()方法可以動態觸發特定的Dom元素上的事件

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="css/mui.min.css" rel="stylesheet" />
        <script src="js/mui.min.js"></script>
        <script type="text/javascript">
            mui.init()
            mui.plusReady(function(){
                document.getElementById('btn1').addEventListener('tap',function(){
                    mui.toast('OK');
                });
                
                //獲取按鈕對象
                  var btns = document.getElementById('btn1');
                  //模擬點擊事件
                  mui.trigger(btns,'tap');
            });
            
            //頁面加載完后就會自動執行tap點擊事件
        </script>
    </head>

    <body>
        <div class="mui-content">
            <button id="btn1" type="button" class="mui-btn mui-btn-blue mui-btn-block">按鈕</button>
             
        </div>
    </body>

</html>

手勢事件

在開發移動端的應用時,會用到很多的手勢操作,比如滑動、長按等,為了方便開放者快速集成這些手勢,mui內置了常用的手勢事件,目前支持的手勢事件見如下列表:

點擊     
tap         單擊屏幕
doubletap      雙擊屏幕
長按     
longtap       長按屏幕
hold         按住屏幕
release       離開屏幕
滑動     
swipeleft      向左滑動
swiperight      向右滑動
swipeup       向上滑動
swipedown      向下滑動
拖動     
dragstart      開始拖動
drag         拖動中
dragend       拖動結束

 

自定義事件

在App開發中,經常會遇到頁面間傳值的需求,比如從新聞列表頁進入詳情頁,需要將新聞id傳遞過去; Html5Plus規范設計了evalJS方法來解決該問題; 但evalJS方法僅接收字符串參數,涉及多個參數時,需要開發人員手動拼字符串; 為簡化開發,mui框架在evalJS方法的基礎上,封裝了自定義事件,通過自定義事件,用戶可以輕松實現多webview間數據傳遞。
添加自定義事件監聽操作和標准js事件監聽類似,可直接通過window對象添加,如下:

//子頁面處理方式
window.addEventListener('customEvent',function(event){mui.toast('ok');});

完整例子:

 主頁面

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="css/mui.min.css" rel="stylesheet" />
        <script src="js/mui.min.js"></script>
        <script type="text/javascript">
            mui.init()
            mui.plusReady(function() {

                //1、進行預加載
                var prpage = mui.preload({ url: 'info.html', id: 'info.html' }); //預加載方法

                //使用on方法統一綁定tap事件
                mui('#list1').on('tap','a', function() {
                    //myEvent自定義事件
                    mui.fire(prpage,'myEvent',{'title':this.innerHTML,'id':this.getAttribute('id')});//這里傳遞是li中的文字
                    mui.openWindow({url:'info.html',id:'info.html'});
                });
            });
        </script>
    </head>

    <body>
        <div class="mui-content">
            <ul class="mui-table-view" id="list1">
                <li class="mui-table-view-cell">
                    <a class="mui-navigate-right" id="1">
                        Item 1
                    </a>
                </li>
                <li class="mui-table-view-cell">
                    <a class="mui-navigate-right" id="2">
                        Item 2
                    </a>
                </li>
                <li class="mui-table-view-cell">
                    <a class="mui-navigate-right" id="3">
                        Item 3
                    </a>
                </li>
            </ul>

        </div>
    </body>

</html>

子頁面

<!doctype html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
        <link href="css/mui.min.css" rel="stylesheet" />
        <script src="js/mui.min.js"></script>
        <script type="text/javascript">
            mui.init()
            mui.plusReady(function(){
                //myEvent是自定義的事件
                //e任性寫的,是一個傳遞過來對象
                window.addEventListener('myEvent',function(e){
                    var title1 = mui('#title1');
                    title1[0].innerHTML = e.detail.title;
                    mui.toast(e.detail.id);
                })
            })
        </script>
    </head>

    <body>
        <header class="mui-bar mui-bar-nav">
            <a class="mui-action-back mui-icon mui-icon-left-nav mui-pull-left"></a>
            <h1 id="title1" class="mui-title">標題</h1>
        </header>
        
    </body>

</html>

 


免責聲明!

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



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