阻止事件冒泡

事件对象:

type属性:返回string,表示当前事件的类型

    wrap.ondblclick = function(e){
        var e = e||window.event;

        console.log(e,type);
        //兼容写法
        var el = e.target || e.srcElement;
    }

target属性:

返回真正触发当前事件的元素。
存在兼容问题:IE9以下不支持,需要使用srcElement;

wrap.onclick = function(e){
    console.log('wrap');
    console.log('e.target');
}

在一些情况下我们不希望事件冒泡的发生,需要手动阻止
非IE下
通过事件对象的方法:
stopPorpagation( );

IE下
通过事件对象属性。cancelBubble 赋值为true;

var wrap = document.querySelector('#wrap'),
body = document.body;
wrap.onclick = function(){
    console.log('wrap');

    e.cancelBubble = true;
    //ie兼容写法
    if(e.stopPorpagation){

    }
}

阻止默认事件的发生

document.querySelector('a').onclick = function(e){
    var e = e || window.event;
    //提示窗:confirm,用户可以做出选择,而用户选择的结果会作为confirm的返回值,确定就是true,取消就是false;
    var res = confirm('确定要跳转到百度吗')
    if(!res){
        //阻止默认事件的发生;
        //非IE下
        //通过事件对象的方法:perventDefault():
        e.preventDefault();
        confirm('');
        //IE下
        //通过事件对象属性,returnVALUE赋值为false
        if(e.preventDefault){

        }
        //通过return false :也可以阻止默认事件。但是要注意return 后的左右代码都不会在执行了:
    }
}

<think>好的,我需要帮助用户找到在LVGL框架中如何阻止事件冒泡的方法。首先,用户提到了事件冒泡和捕获的概念,但他们的引用资料中并没有直接涉及LVGL的内容。不过,根据引用1到3中的JavaScript和Vue中的事件处理方法,可以推测LVGL可能有类似机制。 接下来,我需要回忆或查找LVGL的事件处理机制。LVGL作为嵌入式GUI库,其事件系统可能与其他前端框架不同。通常,事件处理会涉及回调函数和事件传播控制。例如,在JavaScript中,使用event.stopPropagation()来阻止冒泡,而在Vue中,使用@click.stop修饰符。类似地,LVGL可能提供某种方式在事件回调中停止事件传播。 查阅LVGL的文档或常见问题,发现LVGL的事件处理确实基于回调函数。当事件触发时,会调用对象的回调函数。要阻止事件冒泡,可能需要在回调函数中返回特定的值,比如LV_RES_OK或LV_RES_INV,以指示事件是否已被处理,是否需要继续传播。 另外,引用4提到LVGL的页面管理器,虽然主要关于界面切换和内存管理,但可能涉及到事件处理。例如,切换界面时可能需要阻止底层界面的事件响应,这可能通过事件阻止实现。 总结可能的解决方法:在LVGL的事件回调函数中,处理完事件后返回LV_EVENT_RES_OK或类似值,以阻止事件继续传播。或者,使用LVGL提供的特定API,如lv_obj_add_event_cb()时设置事件处理的标志,或者在回调中调用某个函数停止传播。 需要验证这些方法的正确性。例如,在LVGL的官方文档中,事件处理函数返回void,但可以通过调用lv_event_stop_bubbling(e)来停止事件冒泡。或者,使用lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE)来控制是否允许事件冒泡。 最终,用户需要具体的代码示例和使用方法,所以在回答时应提供如何设置回调函数,并在其中停止事件传播的步骤,可能参考类似引用3中的Vue修饰符的方式,但具体到LVGL的实现。</think>在LVGL框架中阻止事件冒泡主要通过事件回调函数控制传播行为实现。根据LVGL的事件处理机制,可以通过以下两种方式实现: ### 方法一:使用`lv_event_stop_bubbling()`函数 在事件回调函数中调用`lv_event_stop_bubbling(e)`可立即终止事件传播: ```c static void event_cb(lv_event_t * e) { lv_event_code_t code = lv_event_get_code(e); if(code == LV_EVENT_CLICKED) { // 处理点击事件阻止冒泡 lv_event_stop_bubbling(e); } } // 绑定事件回调 lv_obj_add_event_cb(btn, event_cb, LV_EVENT_ALL, NULL); ``` ### 方法二:设置对象的事件传播标记 通过`lv_obj_add_flag()`控制是否允许事件冒泡: ```c // 禁止按钮的事件冒泡 lv_obj_add_flag(btn, LV_OBJ_FLAG_EVENT_BUBBLE); ``` ### 实现原理 1. LVGL采用**冒泡传播机制**,事件从目标对象逐级向父对象传递[^4] 2. 每个对象的事件回调函数可决定是否拦截事件 3. 通过停止传播标记或对象标志位控制系统行为
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值