码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 在线流程图和思维导图开发技术详解(四)


    一、项目概述

    二、项目架构

    三、几何计算难点

    四、鼠标事件处理

    五、数据保存与导出

    六、文本处理

    四、鼠标事件处理

    在所有处理器中,鼠标事件处理器是最为复杂的,因为在整个页面中,基本可以使用鼠标完成所有功能。最常见的鼠标动作有三个,分别是左键按下、滑动、左键弹起。有些场合还需要用到双击和右键两个动作,例如双击编辑文字,右击取消添加。除此之外,鼠标的动作还需要配置辅助键,例如CTRL和SHIFT,在拖动图元变换时会用到这两个键。

    一次鼠标点击,包括了按顺序执行的按下、滑动和弹起三个动作,这中间的情况相当多,以下是其中一部分:

    当鼠标按下时,我们需要判断按下的地方是在图元上(实际上还要分是否选中、是否锁定等情况)还是在空白的地方。若是,接下来,我们要看鼠标的动作是滑动还是弹起。若是弹起,一个点击事件就完成了。若是滑动,一般就会引发图元变换的过程。而这一过程需要判断是否按下了CTRL键或SHIFT键,它们会触发不同的动作。最后鼠标弹起,完成一次事件。

    可以看到,对于上面的动作,如果不断使用if/else去处理,这个代码层次将会非常多和冗长,难以管理。

    可以使用状态机的方法去解决这一问题。例如,对于上述动作,可以列出如下的表格:

    原状态动作条件新状态
    初始状态鼠标按下在图元上状态1
    在空白处状态2
    状态1鼠标弹起初始状态
    鼠标滑动按下CTRL状态3
    没有按下CTRL状态4
    状态3鼠标滑动保持不变
    鼠标弹起初始状态
    状态4鼠标滑动保持不变
    鼠标弹起初始状态
    状态2……

    可以看到,利用状态机的方法,代码只会有两层。每个动作之后,只需要对当前动作作出处理(例如改变光标、记录当前位置等),然后改变状态即可。下面列出一段示例伪代码:

    switch 当前状态
        case 初始状态
            if 动作=按下
                if 在图元上
                    作出处理
                    当前状态=状态1
                if 在空白处
                    作出处理
                    当前状态=状态2
        case 状态1
            if 动作=弹起
                作出处理
                当前状态=初始状态
            if 动作=滑动
                if CTRL
                    作出处理
                    当前状态=状态3
                if !CTRL
                    作出处理
                    当前状态=状态4
        case 状态3
            ……              
  • 相关阅读:
    贪心算法解决会场安排问题
    0815-----
    07-Redis缓存设计
    答辩提纲的内容
    YOLOX backbone——CSPDarknet的实现
    景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%
    Visual Studio 2022创建项目没有CUDA模板的解决方法
    微服务框架 SpringCloud微服务架构 20 RestClient 操作索引库 20.1 导入demo
    Docker 搭建 Minio 容器
    程序员在工作之余如何保障收入?兼职才是硬道理!
  • 原文地址:https://blog.csdn.net/lweiyue/article/details/126955290
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号