首页
学习
活动
专区
圈层
工具
发布

从零开始,开发一个 Web Office 套件(10):捕获键盘事件,输入文字

这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的、类似于微软 Office 的 Web Office 套件(包括:文档、表格、幻灯片……等等)。...博客园:《从零开始, 开发一个 Web Office 套件》系列博客目录 富文本编辑器 Github repo 地址:https://github.com/zhaokang555/canvas-text-editor...富文本编辑器 (MVP) 2.22 Feature:通过键盘输入英文 为了实现键盘输入,我们需要在container div元素(canvas父元素)中插入一个input(或者textarea)元素,作为代理...,来捕获键盘相关事件。...然后,当input元素的input事件触发后: 根据键盘输入的字符,新建Char,并插入全局chars列表和当前段落chars列表 重新计算每个段落的布局,以便于:重新生成SoftLine和计算chars

32330

开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析

一.websocket-sharp组件概述     websocket-sharp是一个C#实现websocket协议客户端和服务端,websocket-sharp支持RFC 6455;WebSocket...websocket-sharp是一个单一的组件,websocket-sharp.dll。websocket-sharp是用MonoDevelop开发的。...一个WebSocket.OnOpen当WebSocket连接已经建立发生的事件。WebSocket.OnMessage当发生事件WebSocket接收消息。...一个WebSocket.OnClose当WebSocket的连接已关闭发生的事件。如果要异步连接到服务器,应该使用该WebSocket.ConnectAsync ()方法。...不过看到代码中对异常的捕获还是有些问题,该方法是直接捕获exception异常,这样会导致程序捕获代码块中的所有异常,这样会影响代码的稳定性和代码的可修复性,异常捕获的最好处理方式是将程序进行恢复。

16.1K111
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    由Tailwind CSS 开发的一个最受欢迎的组件库,含60多种组件,提供html和jsx的示例

    官网:https://daisyui.com 这是由Tailwind CSS 开发的一个最受欢迎的组件库,在国外非常流行,目前已经迭代多个版本,并且在github上收获超过37K star 纯 CSS。...让 Tailwind CSS 进入下一个阶段 daisyUI 为 Tailwind CSS 添加了类名 来支持所有常见的 UI 组件 如 btn , card , toggle 等。...使用 daisyUI 主题生成器为自己创建一个定制主题。您选择的色彩将应用于所有 daisyUI 组件。...61 个组件 500+ 个实用类 无限可能无限可能 混合搭配 daisyUI 来创建独特的网页。...文档提供近20种语言翻译,非常的人性化 里面包含的组件超过60多种,都是提供html和jsx的示例,不必再编写额外的js代码,颜值非常高

    54410

    Vue一个案例引发的动态组件与全局事件绑定总结

    下面我们就一步一步的来拆解 第一步 输入框获取焦点后显示组件很简单,我们给输入框绑定焦点事件然后给组件传入一个显示的状态即可,我们把 isShowCityList 传递给城市选择组件控制行为。...,利用的是子组件给父组件利用自定义事件 $emit 传给父组件。...所以这里我们只能去用到 Vue 的全局事件的绑定,然后去进行一个判断我们点击的节点是哪里,如果是城市组件以外我们就进行隐藏操作。 我们在 mounted 钩子函数中,进行如下操作。...,我以为算是结束了,不过那是不可能的,还是我太年轻了,这样做的后果就是不管我们点击任何一个地方它都会触发这个事件,即使是我们切换到其他组件时,事件照样会被触发,显然这个不是我们想要的,因为当前事件会被无限触发...,介绍了我们在 Vue 中如何绑定全局事件以及进行优化,一定要记住事件的绑定与解除哪里有一个大坑。

    1.2K20

    Vue一个案例引发的动态组件与全局事件绑定总结

    ] 下面我们就一步一步的来拆解 第一步 输入框获取焦点后显示组件很简单,我们给输入框绑定焦点事件然后给组件传入一个显示的状态即可,我们把 isShowCityList 传递给城市选择组件控制行为。...所以这里我们只能去用到 Vue 的全局事件的绑定,然后去进行一个判断我们点击的节点是哪里,如果是城市组件以外我们就进行隐藏操作。 我们在 mounted 钩子函数中,进行如下操作。...,我以为算是结束了,不过那是不可能的,还是我太年轻了,这样做的后果就是不管我们点击任何一个地方它都会触发这个事件,即使是我们切换到其他组件时,事件照样会被触发,显然这个不是我们想要的,因为当前事件会被无限触发...,会缓存不活动的组件实例,而不是销毁它们,它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。...,介绍了我们在 Vue 中如何绑定全局事件以及进行优化,一定要记住事件的绑定与解除哪里有一个大坑。

    1.7K00

    Webpack 原理系列十:HMR 原理全解析

    HMR 最初由 Webpack 设计实现,至今已几乎成为现代工程化工具必备特性之一。...连接 Webpack 监听到文件变化后,增量构建发生变更的模块,并通过 WebSocket 发送 hash 事件 浏览器接收到 hash 事件后,请求 manifest 资源文件,确认增量变更范围 浏览器加载发生变更的增量模块...2.4.2 更新事件冒泡 在 Webpack HMR 框架中,module.hot.accept 函数只能捕获当前模块对应子孙模块的更新事件,例如对于下面的模块依赖树: 示例中,更新事件会沿着模块依赖树自底向上逐级传递...中无法捕获 bar.js 的变更事件 这一特性与 DOM 事件规范中的冒泡过程极为相似,使用时如果摸不准模块的依赖关系,建议直接在应用的入口文件中编写热更新函数。...2.5 小结 回顾整个 HMR 过程,所有的状态流转均由 WebSocket 消息驱动,这部分逻辑由 HMR 运行时控制,开发者几乎无感。

    2.9K32

    前端高手特训 从0到1带你手写一个微信小程序底层框架(超清完结)

    组件管理系统:支持组件注册、嵌套、插槽、props 与事件通信。页面路由与栈管理:维护页面跳转历史,模拟 navigateTo、redirectTo 等行为。...该运行时严格遵循“逻辑与视图分离”原则,逻辑层运行 JS,视图层仅接收渲染指令。2....手写时需实现:数据变更捕获与结构化描述新旧状态差异比对(Diff)生成最小更新指令包异步批量提交至视图层,避免频繁重绘性能优化的核心在于“只更新必要的部分”。3....系统需支持:组件定义(properties、data、methods、lifetimes)实例化与父子关系建立插槽(slot)内容分发事件冒泡与跨组件通信每个组件拥有独立作用域,确保状态与样式不互相污染...调试面板:展示组件树、当前数据、网络日志、错误堆栈,类似微信开发者工具。错误边界机制:捕获 JS 异常,防止整个应用崩溃,并提供友好提示。

    24210

    大屏可视化系统:WebRTC视频流与WebSocket实时数据集成方案

    插件定义与封装:每个功能模块(如一个特殊图表、一个3D模型组件、一个数据源处理器)均可封装为独立插件。...例如,一个3D场景插件可以抛出modelClicked事件,携带设备ID,而一个图表插件监听此事件并更新为对应设备的数据。这避免了组件间的直接依赖,实现了松耦合联动。...控制指令:通过 WebSocket 接收的 control_command 类型消息,经适配层转换后,可直接调用相关函数或发布如 LAYOUT_CHANGE_REQUESTED 事件,由布局管理模块响应执行...例如,一个深层的3D模型插件可以抛出 modelClicked 事件,由顶层的控制面板监听并响应,而两者无需直接引用。...同时,可通过事件总线广播状态变更事件,供不直接依赖该状态但需响应的组件使用。

    25400

    Discord 使用单台服务器服务于 100 万在线 MidJourney 用户

    在系统可观测性和性能调优的支持下,该公司对负责发送数十亿条消息通知的 guild 组件进行了一系列的性能和可扩展性增强。...基于 Elixir 的组件负责路由和向用户发送消息通知。Guild 服务器是管理 Discord 社区各种业务流的中心枢纽。...Guild 进程会与很多会话进程进行交互,而这些会话进程使用 WebSocket 连接将消息投递到用户设备上的客户端应用程序中。...他们插装了 Guild 进程的事件处理循环,以捕获消息处理时间的关键指标。团队利用进程堆栈跟踪进行分析,寻找导致消息处理延迟的原因。...仅这一项改变就使扇出(fanout)工作的成本降低了 90%,从而为不断增长的用户数量提供了急需的空间。 开发人员引入了一层新的中继进程,帮助在 Guild 进程和会话进程之间更高效地传递信息。

    50110

    主流自动化测试框架:技术解析与实战手册

    Playwright(微软开源)核心架构:采用进程外通信模型,通过WebSocket协议与浏览器驱动交互,减少HTTP协议导致的延迟(平均响应事件,调试体验更优但仅支持Chromium系浏览器,无法覆盖Safari/移动端真机典型场景:React/Vue组件测试、...快速迭代的前端项目架构对比表:关键差异点维度PlaywrightSeleniumCypress通信协议WebSocket(单连接持久化)HTTP(短连接)浏览器内部通信跨浏览器支持原生三内核依赖Driver...ExpectedConditions替换Thread.sleep(),减少50%超时失败四、决策指南:6大场景选型逻辑现代SPA应用(React/Vue) → Playwright异步加载处理效率提升40%,精准捕获动态路由异常高频...推荐阅读:Playwright初学指南 (1):环境配置与第一个自动化脚本Playwright实战指南:编写UI自动化,速度直接起飞从零开始打造AI测试平台:文档解析与知识库构建详解AI术语详解:从新手到专家的

    37510

    PHP高性能纯协程网络通信引擎Swow

    且由于Swow支持纯C协程与PHP协程混合运行,两者之间仅进行C栈单栈上下文切换,且Swow的事件调度器就是纯C协程,因此大部分协程切换都是单栈切换,其切换速度远超C + PHP的双栈切换。...你无需再为未捕获的异常殚精竭力,也不要再去捕获Throwable,遇到未知的错误请Let it crash。...这也意味着它将更好地兼容已有的生态,我们再也不需要为PHPUnit重写一个由协程包裹的入口。...此外,如果你的项目使用了社区流行协程框架,那么它的升级成本可能仅和由PHP5升级到PHP7相当,并且你还可能因此获得20%的免费性能提升和可观的内存占用缩减。...或是用不超过一百行代码写出一个百K级QPS的 HTTP + WebSocket 混合服务器,整个示例纯同步、零异步回调,还通过异常捕获很轻松地处理了各种错误情况。

    90110

    京东小程序的三生三世

    Manager也是通过JSbridge,额外有一个单独封装的API,就可以直接通过API调用native组件。...提供大量常用组件,开发成本低。 自带ES6支持。 限制: 无法访问到真实的DOM节点。 无法绑定原生事件。 更新需要发版本,微信审核。 6 京东购物小程序 技术预研:前期我们做了大量的技术预研。...利用组件自己的JS,setData到WXML,WXML通过事件回调的方式回调到自己的JS。 组件开发完之后WXML通过import+template的方式引用到页面的WXML里。...6 Page间的通信 我们用事件的方式做了一个page间的通信,支付成功后会触发一个事件,通知到前面需要订阅它的页面去更新自己的状态。...微信给我们提供了onError的API,通过这个API可以捕获到小程序的一些错误,然后我们就能把这些错误信息提交到monitor上,根据监控平台反馈的数据对这些错误进行不断优化和迭代。

    1.5K90

    多端开发实战 | 会员积分抵现系统设计与实现:基于 Taro 的跨平台解决方案

    本文将基于Taro框架,深入剖析如何构建一个支持H5和微信小程序的多端会员积分抵现系统。我们将从架构设计、核心实现到性能优化,全方位展示如何打造一个稳定、高效的积分系统。...2.1.2 状态同步流程优化关键优化点:增量同步:仅同步变更部分,减少数据传输量。冲突解决:服务端基于时间戳的最终一致性策略。离线优先:确保离线操作的可用性。...错误处理:捕获 pointsManager.usePoints() 可能抛出的错误。通过 Taro 的 showToast 显示错误信息。...实时推送:通过 WebSocket 服务 (wsServer) 广播 AUDIT_UPDATE 事件,将日志实时推送到管理后台。...解决方案:封装统一的WebSocket服务:/** * WebSocket统一封装类,提供跨平台的WebSocket实现 * 根据运行环境自动选择小程序WebSocket或标准WebSocket实现 *

    70840

    可视化埋点在React Native中的实践

    在开始介绍我们的系统前,先来看看在 Web 上进行可视化埋点的基本思路:以点击事件为例(下文如果没有特殊说明,均以点击事件为例),Web 可视化埋点一般会提供一个 SDK,SDK 会在 document... 上面监听 click 事件,借助于事件委托的特性,可以捕获到页面上任意元素的 click 事件及元素的信息。... WebSocket 连接到服务端,服务端会生成一个 sessionId 发送给前端: [9e4d50308c574152973c4dabb479841f~tplv-k3u1fbpfcp-zoom-1....同时,SDK 还会将当前所选元素的 trackId 及埋点属性数据来源集合发送到平台服务端,其中埋点属性数据来源集合由元素对应的 React 组件本身和其祖先组件的 props 和 state 属性所组成...我们知道,每个 React 应用背后其实都对应着一颗由 FiberNode 节点组成的树,而 React 类组件中可以通过 this.

    2.7K60

    我有 7种 实现web实时消息推送的方案,7种!

    短轮询很好理解,指定的时间间隔,由浏览器向服务器发出HTTP请求,服务器实时返回未读消息数据给客户端,浏览器再做渲染显示。...SSE 单向通信,只能由服务端向客户端单向通信;webSocket全双工通信,即通信的双方可以同时发送和接受信息。...SSE 实现简单开发成本低,无需引入其他组件;WebSocket传输数据需做二次解析,开发门槛高一些。SSE 默认支持断线重连;WebSocket则需要自己实现。...WebSocket是一种在TCP连接上进行全双工通信的协议,建立客户端和服务器之间的通信渠道。浏览器和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。...服务端使用@ServerEndpoint注解标注当前类为一个websocket服务器,客户端可以通过ws://localhost:7777/webSocket

    12.8K66

    服务器端实时推送技术之SSE

    通常是由某个客户发起,客户端才会需要请求所有数据。 ?...当连接由客户端建立完成,服务端就提供数据,并决定新数据“块"可用时将其发送到客户端。当一个新的数据事件发生在服务端时,这个事件被服务端发送到客户端。...一旦准备好了一个新消息,通过同一初始连接发送回客户端。客户端单独处理来自服务端传回的消息后不关闭连接。所以,SSE 通常重用一个连接处理多个消息(称为事件)。...与 WebSocket 相比,SSE 有一些显著的优势。我认为它最大的优势就是便利:不需要添加任何新组件,用任何你习惯的后端语言和框架就能继续使用。...("result").innerHTML = e.data; }, false);//使用false表示在冒泡阶段处理事件,而不是捕获阶段。

    4.2K31
    领券