DataWorks产品菜单栏的优化解析

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 先来波广告,DataWorks全新起航,提供给大家更优的数据开发体验,有任何建议欢迎反馈。问题:废话不多说,看一下优化之前的菜单栏显示的交互。是的,我就是想直接选中数据开发,怎么就这么难。这一块整体的交互就是hover到上面的图标,然后出现产品菜单,第一版在实现的时候,用css去控制菜单的display属性,所以就会导致当图标失去焦点的时候,菜单就立马消失了。 .logo:hover .list

先来波广告,DataWorks全新起航,提供给大家更优的数据开发体验,有任何建议欢迎反馈。

问题:
废话不多说,看一下优化之前的菜单栏显示的交互。

优化前菜单显示

是的,我就是想直接选中数据开发,怎么就这么难。
这一块整体的交互就是hover到上面的图标,然后出现产品菜单,第一版在实现的时候,用css去控制菜单的display属性,所以就会导致当图标失去焦点的时候,菜单就立马消失了。

.logo:hover .list {
  display: none;
}​


解决思路:
一种常见的解决方式就是设置延时,失去焦点后不会立马消失。这种做法有一个缺点就是当用户真的是想收起菜单时,还是要经过一段延时。
经过主管和师兄的指导,去看了下亚马逊的菜单实现,他们的问题和这个相似,就是如何判断用户是要切换子菜单还是想移动到子菜单中,具体的交互如下:


可以看到在移动到子菜单的过程中,会经过下面的一级菜单,但是子菜单的内容并没有发生变化。具体的实现过程,已经单独抽成了一个jquery的组件,https://github.com/kamens/jQuery-menu-aim

原理解析:
学习了下实现的代码,其核心就是认为当下一刻的鼠标轨迹在这个蓝色三角区域的时候,用户是想移动到子菜单的。
仔细想了下,确实如果用户是想切换一级菜单的时候,鼠标的轨迹一般是会往正下或者正上方向去滑动。



将这个原理应用到现在的场景中,假设当前的鼠标位置为A,那么如果下一刻鼠标的位置在这个红色区域内,就认为用户是想移动到菜单中。
那么怎么判断下一刻鼠标的位置是在三角形内,方法有很多,最简单的判定方法就是,AB与BC的夹角e'1<e1,AC与BC的夹角 e'2<e2。


代码实现:
根据上面分析的原理,进行代码实现。

export default class MenuAim {

  constructor(hoverDom, menuDom) {
    this.hoverDom = hoverDom; // icon
    this.menuDom = menuDom;   // product-list
    this.mouseTrack = [];  // 记录鼠标的移动轨迹,最多只记录三组数据

    this.onMouseOver = this.onMouseOver.bind(this);
    this.onMouseLeave = this.onMouseLeave.bind(this);
    this.onMouseMove = this.onMouseMove.bind(this);

    this.hoverDom.addEventListener('mouseover', this.onMouseOver);
    this.hoverDom.addEventListener('mouseleave', this.onMouseLeave);
    this.hoverDom.addEventListener('mousemove', this.onMouseMove);
    this.menuDom.addEventListener('mouseleave', () => {
      this.menuDom.style.display = 'none';
    });
  }

  onMouseOver() {
    this.menuDom.style.display = 'block';
  }

  onMouseMove(e) {
    this.mouseTrack.push({ x: e.pageX, y: e.pageY });
    if (this.mouseTrack.length > 3) {
      this.mouseTrack.shift();
    }
  }

  onMouseLeave(e) {
    // 鼠标的当前位置
    const currentPosition = {
      x: e.pageX,
      y: e.pageY,
    };
    // 鼠标的上一位置
    const prevPosition = this.mouseTrack[0];
    // 下拉菜单的左上角
    const menuLeftTop = {
      x: this.menuDom.offsetLeft,
      y: this.menuDom.offsetTop,
    };
    // 下拉菜单的右上角
    const menuRightTop = {
      x: this.menuDom.offsetLeft + this.menuDom.offsetWidth,
      y: this.menuDom.offsetTop,
    };

    // 现在的位置与左上角的角度  负值
    const currentLeftScale = (menuLeftTop.y - currentPosition.y) / (menuLeftTop.x - currentPosition.x);
    // 现在的位置与右上角的角度
    const currentRightScale = (menuRightTop.y - currentPosition.y) / (menuRightTop.x - currentPosition.x);

    // 上一位置与左上角的角度   负值
    const prevLeftScale = (menuLeftTop.y - prevPosition.y) / (menuLeftTop.x - prevPosition.x);
    // 上一位置与右上角的角度
    const prevRightScale = (menuRightTop.y - prevPosition.y) / (menuRightTop.x - prevPosition.x);

    if (currentLeftScale > prevLeftScale && currentRightScale < prevRightScale) {
      // 认为用户是要移到下拉菜单
      this.menuDom.style.display = 'block';
    } else {
      this.menuDom.style.display = 'none';
    }
  }
}



优化结果:
最后看一下,优化后的效果。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
相关文章
|
9天前
|
DataWorks 监控 数据建模
DataWorks产品体验评测
DataWorks产品体验评测
|
1月前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
177 9
|
4天前
|
分布式计算 DataWorks 搜索推荐
DataWorks 产品评测与最佳实践探索!
DataWorks 是阿里巴巴推出的一站式智能大数据开发治理平台,内置15年实践经验,集成多种大数据与AI服务。本文通过实际使用角度,探讨其优势、潜力及改进建议。评测涵盖用户画像分析、数据治理、功能表现等方面,适合数字化转型企业参考。
14 1
|
11天前
|
数据采集 机器学习/深度学习 DataWorks
DataWorks产品评测:大数据开发治理的深度体验
DataWorks产品评测:大数据开发治理的深度体验
63 1
|
21天前
|
运维 监控 DataWorks
DataWorks 稳定性保障全解析:深入监控与资源调配
DataWorks 的稳定性保障体系涵盖精细监控与资源调配,确保企业数据业务高效、稳定运行。监控模块包括资源、任务和质量监控,及时预警并处理异常;资源调配策略则针对集成、调度、数据服务及计算资源进行科学配置,保障数据同步、任务优先级和高并发需求。通过全方位的监控和合理的资源配置,DataWorks 为企业筑牢数据根基,助力数字化转型。
64 10
|
23天前
|
SQL DataWorks 大数据
DataWorks产品体验测评
一文带你了解DataWorks大数据开发治理平台的优与劣
156 11
|
21天前
|
缓存 网络协议 安全
融合DNS技术产品和生态
本文介绍了阿里云在互联网基础资源领域的最新进展和解决方案,重点围绕共筑韧性寻址、赋能新质生产展开。随着应用规模的增长,基础服务的韧性变得尤为重要。阿里云作为互联网资源的践行者,致力于推动互联网基础资源技术研究和自主创新,打造更韧性的寻址基础服务。文章还详细介绍了浙江省IPv6创新实验室的成立背景与工作进展,以及阿里云在IPv6规模化部署、DNS产品能力升级等方面的成果。此外,阿里云通过端云融合场景下的企业级DNS服务,帮助企业构建稳定安全的DNS系统,确保企业在数字世界中的稳定运行。最后,文章强调了全链路极致高可用的企业DNS解决方案,为全球互联网基础资源的创新提供了中国标准和数字化解决方案。
|
30天前
|
数据采集 人工智能 DataWorks
DataWorks产品最佳实践测评
DataWorks产品最佳实践测评
|
21天前
|
存储 搜索推荐 数据挖掘
投资回报与预算考量:CRM产品报价全解析
在当今竞争激烈的商业环境中,CRM系统已成为企业不可或缺的工具。它能有效管理客户信息、提升销售效率、优化服务并增强忠诚度。选择合适的CRM需考虑功能、用户数量、定制需求、技术支持及数据安全等因素,确保在预算内实现最大价值。企业在挑选时应明确需求、比较产品、评估长期回报,并考虑扩展性。最适合自己业务需求的CRM才是最佳选择。
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks产品测评|基于DataWorks和MaxCompute产品组合实现用户画像分析
本文介绍了如何使用DataWorks和MaxCompute产品组合实现用户画像分析。首先,通过阿里云官网开通DataWorks服务并创建资源组,接着创建MaxCompute项目和数据源。随后,利用DataWorks的数据集成和数据开发模块,将业务数据同步至MaxCompute,并通过ODPS SQL完成用户画像的数据加工,最终将结果写入`ads_user_info_1d`表。文章详细记录了每一步的操作过程,包括任务开发、运行、运维操作和资源释放,帮助读者顺利完成用户画像分析。此外,还指出了文档中的一些不一致之处,并提供了相应的解决方法。

推荐镜像

更多