当前位置: 首页 > wzjs >正文

烟台市委网站官网个人博客搭建

烟台市委网站官网,个人博客搭建,网页设计图片滑动代码,做境外盈利网站违法吗概述 DomEvent.DoubleTap模块是Leaflet中用于模拟双击(dbclick)事件的模块&#xff0c;主要解决移动端浏览器对双击事件支持不完善或延迟的问题&#xff0c;同时避免与标签(<label>)关联的表单元素误触发。 源码分析 源码实现如下 DomEvent.DoubleTap的源码实现如下&…

概述

DomEvent.DoubleTap模块是Leaflet中用于模拟双击(dbclick)事件的模块,主要解决移动端浏览器对双击事件支持不完善或延迟的问题,同时避免与标签(<label>)关联的表单元素误触发。

源码分析

源码实现如下

DomEvent.DoubleTap的源码实现如下:

function makeDblclick(event) {var newEvent = {},prop,i;// 复制原始事件的所有属性(包括方法)  for (i in event) {prop = event[i];newEvent[i] = prop && prop.bind ? prop.bind(event) : prop;}event = newEvent;// 修改事件类型为dbclick,并标记为模拟事件newEvent.type = "dblclick";newEvent.detail = 2;//表示双击newEvent.isTrusted = false;//非浏览器原生触发newEvent._simulated = true; //Leaflet内部标记return newEvent;
}var delay = 200;
export function addDoubleTapListener(obj, handler) {// 直接监听原生dbclick事件(桌面浏览器)obj.addEventListener("dblclick", handler);var last = 0,detail;function simDblclick(e) {//忽略非单次点击事件if (e.detail !== 1) {detail = e.detail;return;}// 过滤鼠标事件,仅处理触控或笔触if (e.pointerType === "mouse" ||(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {return;}// 检查事件路径,避免label元素误触发var path = DomEvent.getPropagationPath(e);if (path.some(function (el) {return el instanceof HTMLLabelElement && el.attributes.for;}) &&!path.some(function (el) {return (el instanceof HTMLInputElement || el instanceof HTMLSelectElement);})) {return;}// 计算事件间隔,模拟双击var now = Date.now();if (now - last <= delay) {detail++;if (detail === 2) {handler(makeDblclick(e)); //触发自定义dbclick事件}} else {detail = 1;}last = now;}// 监听click事件,通过时间间隔判断双击obj.addEventListener("click", simDblclick);return {dblclick: handler,simDblclick: simDblclick,};
}export function removeDoubleTapListener(obj, handlers) {obj.removeEventListener("dblclick", handlers.dblclick);obj.removeEventListener("click", handlers.simDblclick);
}

源码详解

  1. makeDbclick(event)函数:构造模拟的双击事件
  • ​目的:克隆原始事件并转换为自定义的 dblclick 事件,用于模拟双击行为。
  • 关键点
    • ​属性复制:遍历原始事件属性,若属性是方法(如 preventDefault),则绑定到原始事件上下文。
    • 标记为非可信事件isTrusted: false 表示此事件由脚本生成,而非用户直接操作触发。
  1. addDoubleTapListener(obj, handler)函数:添加双击监听
  • ​核心逻辑
    1. ​双重监听

      • 直接监听原生 dblclick(桌面浏览器有效)。
      • 通过 click 事件模拟移动端双击(simDblclick)。
    2. 过滤非触控事件

      • pointerType === 'mouse':排除鼠标操作。
      • sourceCapabilities.firesTouchEvents:仅处理触控或笔触(Chrome 特性)。
    3. 避免 <label> 误触发

      • 若事件路径中存在关联 <label for> 但无对应表单元素(如 <input>),则忽略点击。
    4. 时间间隔判断:

      • 两次 click 间隔小于 200ms 视为双击,触发自定义 dblclick 事件。
  1. removeDoubleTapListener(obj, handlers)函数:移除双击监听
  • ​目的:移除之前通过addDoubleTapListener添加的 dblclicksimDblclick 事件监听器。

  • 关键点:需传入之前返回的handles对象,确保移除正确的监听函数。

关键设计思想

  1. 移动端兼容性
    移动端浏览器通常不直接支持dbclick事件,通过快速连续点击(click)模拟双击行为

  2. 避免冲突:

    • 过滤 <label> 元素点击,防止其关联的表单元素(如复选框)被误操作。
    • 区分触控和鼠标事件,避免重复处理。
  3. 性能优化:

    • 使用 200ms 间隔判断双击,平衡响应速度和误触概率。
    • 通过 DomEvent.getPropagationPath(e) 获取事件传播路径,精确控制事件逻辑。

使用场景

  • ​地图双击缩放:用户快速双击地图时,触发放大地图的操作。
  • 移动端手势支持:在触控设备上实现与桌面浏览器一致的双击交互。

潜在问题与注意事项

  1. 事件可信度
    模拟的 dblclick 事件 isTrusted: false,某些安全策略可能限制其行为(如阻止默认动作)。

  2. ​时间间隔敏感性

200ms 的间隔可能导致部分用户操作未被识别为双击,需根据实际需求调整。

  1. 浏览器兼容性
  • sourceCapabilities 是 Chrome 特有属性,其他浏览器可能需额外兼容处理。
  • DomEvent.getPropagationPath 是 Leaflet 内部方法,用于获取事件传播路径(等价于 e.composedPath())。

总结

  • 核心功能:通过监听快速连续的 click 事件模拟 dblclick,解决移动端兼容性问题。
  • 设计亮点
    • 双重事件监听(原生 + 模拟)兼顾不同环境。
    • 路径过滤避免
    • 严格区分触控与鼠标事件。
  • 适用场景:需要跨平台支持双击交互的 Web 应用(尤其是地图库)。
http://www.dtcms.com/wzjs/271188.html

相关文章:

  • wordpress+游戏插件seo搜索引擎优化案例
  • 东莞网站设计在哪里网络推广代运营公司
  • 亚马逊美国站登录入口市场营销推广方案怎么做
  • 网站建设 前沿文章做网站好的网站建设公司
  • 哪个网站做logo新媒体营销案例
  • 企业网站建设入账企业老板培训课程
  • 网站制作要学哪些独立站seo搜索优化
  • php做不了大型网站吗网址ip地址查询工具
  • 制作b2c网站估价长沙网站到首页排名
  • 如何查询网站日志文件友链交易
  • 国内的优秀网站做网站推广公司
  • 如何使网站能被百度搜到人工在线客服
  • 做网站什么软件深圳最新消息
  • 建立内部网站微信上怎么做广告推广
  • 做网站快速赚钱网站怎样关键词排名优化
  • 什么是网站单页网络热词2023
  • 资料下载网站建设seo优化软件哪个好
  • 网站的域名可以更改吗可以访问境外的浏览器
  • 做菠菜网站广州今日刚刚发生的新闻
  • 政府网站设计有什么要点网站搜索优化官网
  • 成都 网站建设 app 开发代运营哪家比较可靠
  • dede做的网站总被挂马接单平台
  • 下载天马行市民云app广州市口碑seo推广
  • 安装了lnmp怎么做网站百度关键词竞价查询系统
  • 景区网站建设要求网上开店如何推广自己的网店
  • 廊坊哪里做网站搜索引擎技巧
  • 做网站开发的想接私活互联网营销渠道有哪些
  • 网站建设验收总结讲话线在成都网站推广公司
  • 怎么做网站排名迅雷下载磁力天堂
  • 校园文化建设网站宁波seo服务