cheerp 使用事件的例子
这个文章主要描述在cheerp环境下, c++代码如何通过js包装使用dom事件
1 what?事件
事件作为js异步编程的核心,很好的把逻辑分散开来,形成各个处理的handler。 首先事件的目标和当前目标都是实现了派发接口的,可以响应
事件并且可以添加事件监听处理的交互对象。
事件流拥有冒泡机制, 即从顶级元素流经目标元素并最终回到顶级元素,即所有的子元素都会作为事件流中的目标(target)来响应事件。
对于事件的应用,我想会有大量的文档在网络上,本文就不占篇幅了。
如果我们要使用cheerp平台做事件的派发和回调需要说明的内容就在这里了。
2事件的例子
在cheerp中注册一个最顶级的交互元素, 这个元素是window我们拥有window了以后可以拥有js端的玩法在c++端。
A. 首先我们先在js端实现一下浏览器端的事件定义,公开这些接口给cheerp。
cheerp定义:
Window * window_get_Window(); CustomEvent * window_getCustomEvent (const String & name); CustomEvent * window_getCustomEvent (const String & name, Object * param);
window_getCustomEvent用了overload技术来适应js,然后在js文件中公开这两个函数。ps:(为了简单我把这两个函数作为全局函数定义,其实可以定义在包里)
function window_get_Window () { return window; } function window_getCustomEvent(type, params) { return new CustomEvent(type, {detail:params}); }
B. 在cheerp端定义一个事件类型
#define MY_EVENT_PUB "pub"
C.用cheerp编写一个简单的使用监听的生成js代码
class [[cheerp::genericjs]] TestEvent { private : static void MyEventPubHandler(Object *e) { console.log("i am catch this event"); } public: TestEvent() { } static void init () { Window * window = window_get_Window(); window->addEventListener(MY_EVENT_PUB, cheerp::Callback(MyEventPubHandler)); Event * event = window_getCustomEvent(MY_EVENT_PUB, false); window->dispatchEvent(event); }
};
D.在webMain入口中使用。
void webMain () { //wasm 函数 TestEvent::init(); }
然后编写一个makefile 生成两个不同版本的放在浏览器里run。
CHERRP_PATH=/cygdrive/c/cheerp/include SOURCE=main.cpp CHEERP_FLAG=-target cheerp -w WASMFLAGS=-cheerp-linear-heap-size=256 -cheerp-linear-heap-size=256 -cheerp-mode=wasm -cheerp-no-math-imul WASM_LOADER=-cheerp-wasm-loader=loader.js -cheerp-wasm-file=./build/test.wasm CC=clang++ DIST_JS=./build/test.js DIST_WASM=./build/test_wasm.wasm clear: @rm -f ./build/* test.wasm: $(CC) $(CHEERP_FLAG) $(WASMFLAGS) $(WASM_LOADER) -O3 -o $(DIST_WASM) main.cpp test.js: $(CC) $(CHEERP_FLAG) -O3 -o $(DIST_JS) main.cpp cat head.js >> $(DIST_JS) all: clear test.js test.wasm @echo "build done"
这样我们就可以拥有浏览器平台的事件流的能力了。
代码地址:git
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python最赚钱的4个方向,你最心动的是哪个?
身边有不少朋友最近都开始学习python,大多都在学了一两个月之后来问小编,我现在已经入行了,能去找什么样的工作呢?如果有对学python方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步呀。也希望大家对学python能够持之以恒 小编只能说:入行!=找工作那么,自学python的人,如何才能找到满意的工作呢?首先!合理制定学习计划,追踪学习进度!学习毕竟是个体力活,急于求成反而不美,不如按照这四个方向来制定自己的学习计划: 0.python语言基础:掌握python脚本python界面编程能力数据库基本爬虫多线程多进程开发能力。掌握以上技能,就能胜任基本的python开发工作。(平均月薪8k起)1.python web开发:掌握前端知识python三大后端框架具备独立开发网站的能力这些就是web全栈开发工作需要掌握的技能。(平均月薪10k左右)2.python爬虫:掌握python爬虫技术多线程爬虫技术分布式爬虫技术能够高效胜任爬虫工作。(平均月薪12k)3.python数据分析掌握python数据分析python数据可视化python机器学习、胜任数据分析和人...
- 下一篇
JAVA学习day06
1、3种引用类型 1、数组 2、类 3、接口 2、定义类: 使用类的形式,对现实中的事物进行描述 事物:方法,属性 方法:这个事物具备的功能 属性:变量 格式: Public class 类名{ 属性定义 修饰符 数据类型 变量名 =值 方法定义 修饰符 返回值类型 方法名(参数列表){ } } 3、创建引用类型的变量的格式 数据类型 变量名 =new 数据类型(); 4、实现引用类型的步骤 1、导入包;如果类都是在同一个文件夹,不需要导入包; 2、创建引用类型的变量 3、变量.类型中的功能(也可以调用类中的属性,属性就是变量,赋值和获取值) 测试手机类: /* 定义类: 使用类的形式,对现实中的事物进行描述 事物: 方法,属性 方法: 这个事物具备的功能 属性: 变量 格式: public class 类名{ 属性定义 修饰符 数据类型 变量名 = 值 方法定义 修饰符 返回值类型 方法名(参数列表){ } } 要求: 使用Java中的类,描述生活中的手机这个事物 手机事物,具备哪些属性, 属于他自己的特性 颜色,品牌, 大小 */ public class Phone{ /* 定义...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境