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>
复制代码

 

posted @   幽冥狂_七  阅读(8794)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示