21.Chromium指纹欣赏器开发教程之触摸屏点指纹定制

打印 上一主题 下一主题

主题 1941|帖子 1941|积分 5823

欣赏器触摸屏概述

欣赏器触摸屏信息主要是指欣赏器可以检测并响应用户在触摸屏装备上进行的触摸操纵。随着移动装备和触摸屏装备的普及,触摸事件(Touch Events)变得越来越紧张。欣赏器通过触摸事件 API 提供对触摸屏操纵的支持,使开发者可以或许创建更加互动和响应的用户体验。
触摸事件 API 提供了一系列事件,用于检测和处理触摸操纵。这些事件包罗:

  • touchstart:当一个或多个手指触摸屏幕时触发。
  • touchmove:当一个或多个手指在屏幕上移动时触发。
  • touchend:当一个或多个手指从屏幕上移开时触发。
  • touchcancel:当触摸被中断时触发,如忽然接听电话或欣赏器上下文改变。
每个触摸事件对象包罗有关当前触摸状态的详细信息。关键属性包罗:

  • touches:一个 TouchList 对象,包罗当前在屏幕上的所有手指的触摸信息。
  • targetTouches:一个 TouchList 对象,包罗当前与事件目的相干的所有手指的触摸信息。
  • changedTouches:一个 TouchList 对象,包罗自上一个触摸事件以来发生了变革的所有手指的触摸信息。
每个 Touch 对象包罗以部属性:

  • identifier:唯一标识触摸点的 ID。
  • target:触摸点的事件目的元素。
  • clientX 和 clientY:触摸点相对于欣赏器窗口的 X 和 Y 坐标。
  • screenX 和 screenY:触摸点相对于屏幕的 X 和 Y 坐标。
  • pageX 和 pageY:触摸点相对于文档的 X 和 Y 坐标。
以下是一个HTML示例,展示如何利用 JavaScript 处理触摸事件:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>Touch Event Example</title>
  7.   <style>
  8.     #touchArea {
  9.       width: 300px;
  10.       height: 300px;
  11.       background-color: lightgray;
  12.       border: 2px solid black;
  13.       text-align: center;
  14.       line-height: 300px;
  15.     }
  16.   </style>
  17. </head>
  18. <body>
  19.   <div id="touchArea">Touch here</div>
  20.   <script>
  21.     const touchArea = document.getElementById('touchArea');
  22.     touchArea.addEventListener('touchstart', function(event) {
  23.       handleTouchEvent(event, 'touchstart');
  24.     });
  25.     touchArea.addEventListener('touchmove', function(event) {
  26.       handleTouchEvent(event, 'touchmove');
  27.     });
  28.     touchArea.addEventListener('touchend', function(event) {
  29.       handleTouchEvent(event, 'touchend');
  30.     });
  31.     touchArea.addEventListener('touchcancel', function(event) {
  32.       handleTouchEvent(event, 'touchcancel');
  33.     });
  34.     function handleTouchEvent(event, eventType) {
  35.       event.preventDefault();
  36.       const touches = event.touches;
  37.       const touchList = [];
  38.       for (let i = 0; i < touches.length; i++) {
  39.         touchList.push({
  40.           identifier: touches[i].identifier,
  41.           clientX: touches[i].clientX,
  42.           clientY: touches[i].clientY,
  43.         });
  44.       }
  45.       console.log(`Event: ${eventType}`, touchList);
  46.     }
  47.   </script>
  48. </body>
  49. </html>
复制代码
将其保存为HTML文件,用欣赏器打开之后,此时还没开启触摸屏,因此鼠标操纵是没有效果的。打开开发者工具,切换为手机访问之后,即可触发各类事件。如图4-15所示,鼠标单击灰色地区,即可触发触摸屏事件:

在上述监听事件当中,通过 getElementById 获取触摸地区元素。为 touchArea 添加了 touchstart、touchmove、touchend 和 touchcancel 事件监听器,分别处理差别范例的触摸事件。
在 handleTouchEvent 中,起首调用 event.preventDefault 防止默认行为(如滚动)。然后从事件对象中提取 touches 列表,并遍历此中的每个触摸点,提取 identifier、clientX 和 clientY 属性。最后将触摸点信息存储在 touchList 数组中,并在控制台中输出触摸事件范例和触摸点信息。
触摸屏在欣赏器中的用途非常多,开发者可以利用触摸事件来实现多点触控手势,如缩放、旋转和滑动。而且触摸事件可以用于绘图应用,允许用户在触摸屏上绘制和编辑图像。
如果想要将欣赏器模拟为移动端的指纹信息,那么就需要开启此中的触摸屏。因为在移动端,欣赏器作为一个APP,是需要用户通过触摸屏操纵的,是没有外接鼠标键盘的。如果要模拟移动端指纹,却不开启触摸屏,那么很容易就被检测为在伪造指纹信息。
欣赏器触摸屏支持检测

欣赏器是否支持触摸屏可以通过多种函数进行检测。以下是几种常见的检测:

  • 利用 navigator.maxTouchPoints。
navigator.maxTouchPoints 属性返回装备上可用的触控点数量。如果装备支持触摸屏,则返回值大于 0。代码如下:
  1. function isTouchDevice() {
  2.   return 'maxTouchPoints' in navigator && navigator.maxTouchPoints > 0;
  3. }
  4. console.log("Is touch device: " + isTouchDevice());
复制代码

  • 利用 window.matchMedia。
通过查询媒体特性 hover 和 pointer,可以判断装备是否支持触摸。代码如下:
  1. function isTouchDevice() {
  2.   return window.matchMedia("(pointer: coarse)").matches;
  3. }
  4. console.log("Is touch device: " + isTouchDevice());
复制代码

  • 利用 ontouchstart 事件。
通过检测 ontouchstart 事件是否存在,可以判断装备是否支持触摸。代码如下:
  1. function isTouchDevice() {
  2.   return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
  3. }
  4. console.log("Is touch device: " + isTouchDevice());
复制代码
如果欣赏器没有通过开发者工具切换为移动端欣赏器,那么上述探测都是否。相反,如果切换为移动端访问,那么PC端欣赏器也就可以模拟移动端拥有触摸屏支持了。
欣赏器触摸屏指纹定制

本书将定制欣赏器触摸屏信息navigator.maxTouchPoints。因为这是一个涉及动作的操纵,所以在Chromium源码中相干代码在src\third_party\blink\renderer\core\events文件夹中,在这个文件夹中,navigator_events.cc文件中单独界说了这个API,它的的具体代码如下:
  1. int32_t NavigatorEvents::maxTouchPoints(Navigator& navigator) {
  2.   LocalDOMWindow* window = navigator.DomWindow();
  3.   return window ?
  4. window->GetFrame()->GetSettings()->GetMaxTouchPoints() : 0;
  5. }
复制代码
这段代码用于获取当前欣赏器窗口支持的最大触摸点数。函数的返回范例是 int32_t,表示返回一个 32 位的整数。它接受一个 Navigator 对象的引用作为参数。
在函数内部,起首调用 navigator.DomWindow 获取一个指向 LocalDOMWindow 对象的指针,并赋值给window变量,这个window变量表示当前的欣赏器窗口。然后通过条件运算符 ? : 判断这个指针是否为空。如果 window 变量非空,就通过一系列函数调用来获取最大触摸点数:起首通过GetFrame函数获取当前窗口的,接着通过GetSettings函数获取与当前窗口相干联的设置,最后通过GetMaxTouchPoints函数获取最大触摸点数。如果 wi-ndow 为空,则直接返回 0。
这段代码的功能是检测当前欣赏器窗口的最大触摸点数,如果窗口存在,通过窗口的框架和设置获取这个值;如果窗口不存在,则返回 0。这样的函数通常用于触控装备的功能检测,根据装备支持的触摸点数调整应用的触控交互方式。例如,在支持多点触控的装备上启用多点触控手势,而在不支持触摸的装备上禁用这些功能。这个函数确保了程序可以或许根据装备的硬件能力进行适当的调整。
在对欣赏器触摸屏信息进行定制的时候,只需要将maxTouchPoints函数的返回值定制为1,即分析欣赏器支持触摸屏,具体修改代码如下:
  1. bool mobile = *(json_reader->GetDict().FindBool("mobile"));
  2. if (mobile) {
  3.     return 1;
  4. }
  5. return 0;
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表