使用 CSS 3D 变换从 DOM 对象接收变换后的鼠标事件数据

2024-03-14

目前 JavaScript 鼠标事件中是否有任何数据可以让我轻松查找或计算相对于转换元素的 3D 空间的鼠标位置?

为了直观地说明,
左边是没有 3d 矩阵的 div,右边是经过 3d 变换的 div。
o是鼠标事件的起源

                +
               /|
              / |
+-----+      +  |
|     |      |  |
|    o|  =>  | o|
|     |      |  |
+-----+      +  |
              \ |
               \|
                +

在下面的脚本中,单击 div 中的相同像素将报告event.layerX它位于文档/屏幕的二维变换空间中。

我知道,但对解析div的matrix3d并使用它乘以事件位置来发现这一点并不感到兴奋,但是在真正的实现中,div将有更复杂的转换,这需要在不止一个对象的每一帧,我担心会带来的开销……如果这是我唯一的选择,我当然不介意提供帮助。

<!doctype html>  

<html lang="en">

<head>
    <meta charset='utf-8'>
    <title></title>
    <style type="text/css" media="screen">

        body {
            background-color: #FFF;
        }

        img {
            position: absolute;
        }

        #main {
            margin: 0;
            -webkit-perspective: 1800;
        }

        #card {
            position: relative;
            margin: 0 auto;
            width: 420px;
            height: 562px;
            -webkit-transform-style: preserve-3d;
            -webkit-transform-origin: center center;
        }

        #card .page {
            position: absolute;
            -webkit-transform-style: preserve-3d;
            -webkit-transform-origin: left center;
        }

        #card .page .face {
            position: absolute;
            width: 100%;
            height: 100%;
            -webkit-transform-style: flat;
        }
        #card .page .face.front {
            z-index: 1;
            -webkit-backface-visibility: hidden;
        }
        #card .page .face.back {
            -webkit-transform: rotateY(180deg) translateX(-420px);
        }

    </style>
</head>

<body>
    <div id='main'>
        <div id='card'>
            <div class='page draggable'>
                <div class='face front'>
                    <img src='front.jpg'/>
                </div>
                <div class='face back'>
                    <img src='back.jpg'/>
                </div>
            </div>
        </div>
    </div>

    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'></script>
    <script>


        function rotate() {
            $('.page').css("-webkit-transform", "rotate3d(0, -1, 0, 60deg)");
            $('.page').mousedown(function(event) {
                console.log(event.layerX);
            });
        }

        $(document).ready(function() {
            rotate();
        });

    </script>

</body>

</html>

看来您正在寻找offsetX财产event。 也许您必须为每个 .face 创建侦听器才能识别事件,因为offsetX计算基于target触发事件。 或者也许您希望坐标从左侧的 0 开始到右侧的宽度*2,那么您可以使用layerX 和原始的width你的元素:

console.log((event.layerX<0?width-event.offsetX:width+event.offsetX));

无论您使用什么转换,使用 offsetX/offsetY 都有效(至少在我测试过的许多场景中)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CSS 3D 变换从 DOM 对象接收变换后的鼠标事件数据 的相关文章

随机推荐

  • Joomla 的自定义模板支持

    Joomla 是相当不错的 CMS 但是有什么方法可以创建 joomla 支持的自定义模板吗 如果我理解您的问题 您想要转换甚至不是 Joomla 模板的现有模板 如果是这种情况 我发现很难做到 当然这取决于模板的来源 我最终采用了 Joo
  • 移动所有 git 分支中的文件夹

    我们有一个有 20 个分支的中央存储库 它们都使用如下布局 gitignore file1 txt file2 txt 现在应该改为 gitignore ProjectFolder file1 txt ProjectFolder file2
  • Carbon 获取指定开始年份和当前年份之间的年份

    如果可能的话 是否可以使用 Carbon 来获取数组中起始年份和当前年份之间的年份 所以今年的数组将是 2014 2015 2016 明年 2017 年将包括 2014 2015 2016 2017 Thanks 解决方案 years ra
  • lapply后从列表返回到data.frame

    我有一个关于 lapply 的非常简单的问题 我正在从 STATA 过渡到 R 我认为有一些非常基本的概念 我没有在 R 中循环 但是我整个下午都在阅读它 但无法找到一个合理的方法来完成这个非常简单的事情 我有三个数据框 df1 df2 和
  • Google Drive API“监视”文件夹中,如何知道添加了哪些文件

    我正在运行一个测试端点 当我将文件放入监视文件夹时 我收到一个带有标头的请求X Goog Resource State update 但我似乎没有获得添加文件的 ID I get X Goog Resource Id我原以为这可能是新文件
  • 如何使 README_FOR_APP 的内容出现在 doc/app/index.html 中

    我想要的内容doc README FOR APP出现在doc app index html 当我做rake doc app 目前 内容为 这是 Rails 应用程序文档的 API 文档 To see README FOR APP 我必须点击
  • 中没有足够的空间。如何添加多行

    我想在选项文本下添加描述该选项的行 默认情况下 mat select 限制字符数并在行末尾添加 我想要有需要的多行选项 斯塔克闪电战演示 https stackblitz com edit angular wj9svw https stac
  • Python-如何检查Redis服务器是否可用

    我正在开发一个用于访问 Redis 服务器的 Python 服务 类 我想知道如何检查Redis服务器是否正在运行 而且如果不知何故我无法连接到它 这是我的代码的一部分 import redis rs redis Redis localho
  • Ruby 项目帮助。无法从数组中获取已保存的实例

    TLDR 我正在开发一个使用 API 创建实例的项目 我希望能够回忆起所有的实例 但不知道如何回忆 我对 Ruby 和一般编程还比较陌生 所以我希望我能很好地解释一切 这是我的代码 class Suggestion attr accesso
  • 使用 AJAX 在 Bootstrap Modal 上调用 PHP 函数

    我使用 PHP 循环在我的页面上回显了用户列表 当我单击每个用户的名称时 会弹出一个 Bootsrap 模态并显示该用户的更多详细信息 链接看起来像这样 a href user UserName a 如您所见 我将用户的 ID 传递给 Bo
  • Ruby on Rails、LinkedIn:模块错误

    有人遇到过这个错误吗 NoMethodError undefined method new for LinkedIn Module 我认为这与omniauth和linkedin有关 这是我的 Gemfile gem omniauth gem
  • 要构建 php MVC,我需要注意哪些命名约定?

    我对 OO PHP 还很陌生 但是我了解它是如何工作的 并准备开始为我正在开发的大型网站构建 MVC 我知道没有必要这么写你必须这样做但还是得有一些正常的习惯 类名 驼峰命名法 下划线 类文件 与类相同 url post get 控件名称
  • Django 更新查询集以更改外键的 ID

    我正在尝试更新一堆对象的 id 以及引用这些对象的相关表 class Test models Model id models IntegerField primary key True class Question models Model
  • JavaScript RegEx 确定电子邮件的域(例如 yahoo.com)

    使用 JavaScript 我想接受输入 第一次验证电子邮件是否有效 我解决了这个问题 2 验证电子邮件地址是否来自 yahoo com 有人知道可以提供域名的正则表达式吗 thxs var myemail email protected
  • 是 .yaml 还是 .yml?

    根据yaml org http www yaml org faq html 官方文件扩展名是 yaml Quote YAML 文件有官方扩展名吗 请尽可能使用 yaml 然而 互联网上对于使用哪个扩展似乎存在分歧 如果你抬头看网上的例子 h
  • 如何在控件实例化后立即发送自定义事件消息?

    创建此自定义控件并在客户端中测试它时 发送 ValueChanged 事件时出现空异常错误 自定义控件来源 using System using System Collections Generic using System Compone
  • 从内存缓冲区初始化 C++ std::istringstream?

    我有一个内存块 不透明 我想通过他们的 C 适配器将其存储在 mySQL 中的 Blob 中 适配器需要一个 istream virtual void setBlob unsigned int parameterIndex std istr
  • 浏览器的HTTP缓存的存储位置在哪里?磁盘或内存

    浏览器的HTTP缓存的存储位置在哪里 磁盘或内存 我只是想知道为什么有些文件来自磁盘缓存而另一些文件来自内存缓存 HTTP 缓存背后的机制是什么 哪个缓存的优先级更高 看起来脚本和样式表存储在磁盘中 而图像和字体存储在内存中 也许是解决方案
  • Django 查询选择不同的字段对

    我的 提交 字段有一个用户和一个问题 如何获得 SQL 搜索结果 该结果将给出每个用户 问题对仅包含一个结果的列表 模型是这样的 class Problem models Model title models CharField Title
  • 使用 CSS 3D 变换从 DOM 对象接收变换后的鼠标事件数据

    目前 JavaScript 鼠标事件中是否有任何数据可以让我轻松查找或计算相对于转换元素的 3D 空间的鼠标位置 为了直观地说明 左边是没有 3d 矩阵的 div 右边是经过 3d 变换的 div o是鼠标事件的起源 o gt o 在下面的