Javascript,CSS:将变换原点更改为手势更改的中心点

2024-04-17

我想将变换原点更改为捏合手势的中心点。

此工作代码(safariDevSample)应用缩放和旋转而不改变transform-origin:

window.angle = 0; //global to store data for later reset ....
var newAngle;

window.scale = 1;
var newScale;

function saveChanges() {
    window.angle = newAngle;
    window.scale = newScale;
}

function getAngleAndScale(e) {
    // Don't zoom or rotate the whole screen
    e.preventDefault();

    newAngle = window.angle + e.rotation;

    newScale = window.scale * e.scale;

    if (newScale < 1) newScale = 1; //prepend to scale smaller then parent

    // Combine scale and rotation into a single transform
    var tString = "rotate(" + newAngle + "deg) scale(" + newScale + ")";
    document.getElementById("theImg").style.webkitTransform = tString;

}

function init() {
    document.getElementById("theImg").addEventListener("gesturechange", getAngleAndScale, false);
    document.getElementById("theImg").addEventListener("gestureend", saveChanges, false);
}

init();

我尝试过使用touchstart and gesturestart screenX screenY作为附加事件侦听器但没有成功。


我想我通过使用 touchstart 事件找到了一个可行的解决方案。 首先获得一个固定的过渡原点,然后将其转换为相对原点。 然后可以通过每次捏来使用...

var yO = 50; 
var xO = 50; 

window.scale = 1;

var newScale; 


function saveChanges() {



    window.scale = newScale;
}


function getTouchStartXY(e){

myTouchStartNullX =  e.touches[0].pageX;
myTouchStartNullY =  e.touches[0].pageY;

myTouchStartSecondX =  e.touches[1].pageX;
myTouchStartSecondY =  e.touches[1].pageY;

myTouchStartX = (myTouchStartNullX + myTouchStartSecondX)/2;
myTouchStartY = (myTouchStartNullY + myTouchStartSecondY)/2;

   var boundingBox = document.getElementById('theImg').getBoundingClientRect();
        picX = boundingBox.left;
  picY = boundingBox.top;
  picRight = boundingBox.right;
    picBottom = boundingBox.bottom;

  if(picX < 0 )picX = picX* (-1);
    if(picY < 0 )picY = picY* (-1);
    xO = ((picX + myTouchStartX)/(picX + picRight))*100;
    yO = ((picY + myTouchStartY)/(picY + picBottom))*100;


     document.getElementById("theImg").style['webkitTransformOrigin'] = xO + '% ' + yO + '%';  

}

function getAngleAndScale(e) {

     // Don't zoom or rotate the whole screen

    e.preventDefault();

      newScale = window.scale * e.scale;
//if(newScale < 1)newScale = 1;





    // Combine scale and rotation into a single transform

    var tString = "scale(" + newScale + ")";

    document.getElementById("theImg").style['webkitTransform'] = tString;

}




function init() {
    document.getElementById("theImg").addEventListener("touchstart", getTouchStartXY, false);

    document.getElementById("theImg").addEventListener("gesturechange", getAngleAndScale, false);
    document.getElementById("theImg").addEventListener("gestureend", saveChanges, false);

}

init();

Thx

Hans

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

Javascript,CSS:将变换原点更改为手势更改的中心点 的相关文章

随机推荐

  • 使用免费 IP 地理定位网络服务从 IP 地址获取国家/地区名称

    首先感谢大家 我读到我可以使用免费的 IP 地理定位网络服务从 IP 地址获取国家 地区名称 但是我如何获得对我的网站的响应 实际上这就是我所看到的 在我的网站中需要显示 IP 地址中的国家 地区名称 你能详细告诉我吗 我怎样才能显示该网站
  • 解决角度 2 中未调用子路由的问题

    路由器详细信息 这是延迟加载的功能模块的路由详细信息 路线是 customers const routes Routes path component CustomersComponent children path component C
  • Android 中用户当前位置图标覆盖的聚类标记

    I m using google map that implemented Clustering marker inside However my markers has been overlaid by User s current lo
  • 无法在 gitlab-ci runner 上运行最新的 docker

    我正在测试 gitlab ci 并尝试从 Dockerfile 在注册表上生成图像 我有相同的代码只是为了测试 gitlab ci image docker latest tages build deploy build applicati
  • 如何从向量或数组中随机选择一个元素?

    我有一个向量 其中元素是 String String 我如何随机选择这些元素之一 你想要的rand https crates io crates rand 板条箱 特别是choose https docs rs rand 0 7 2 ran
  • 如何从 Laravel 资源控制器中删除 show() 函数

    我的 Laravel 项目中有资源控制器 Route Route resource products ProductsController 在 ProductController 中 我不想使用show id 函数 因为我的项目中不需要这个
  • 未捕获的类型错误:无法读取未定义的属性“draw”

    for var i 0 i lt reduced length i var innerdata for var j 0 j lt days length j var rev 0 each reduced i data function ti
  • 如何替换 Google 云端硬盘中的文件?

    使用以下代码 该代码取自android 快速入门 如果您拍摄多张照片 此代码可以生成多个同名文件 如何修改才能保证同名文件被替换呢 public class MainActivity extends Activity implements
  • 带箭头的线图

    我有一个折线图 我想使用箭头而不是线条来绘制 也就是说 连续的点对之间的线应该是从第一个点到第二个点的箭头 我知道的arrow功能 但这似乎只做单个箭头 在我找到一种方法来尝试使用它来完成整个情节之前 是否有更好的方法来做到这一点 你可以这
  • TortoiseHg无法提交--“系统找不到指定的文件”

    我刚刚选择了 TortoiseHg 用于 Windows 上的分布式源代码控制 并将其安装在我的 C 驱动器上 然后我创建了一个存储库 位于 D projects 中 当我尝试提交更改时 它给了我错误 abort None 系统找不到 指定
  • 应用程序未安装在模拟器上:警告:打开音频输入失败

    我创建了一个 你好 项目 我没有更改 eclipse 生成的默认模板的任何内容 然后我运行了该应用程序 我没有收到任何错误 但是 该应用程序并未安装在模拟器上 环境 windows7 x64 jdk 7u7 windows x64 inst
  • 获取ASP.NET网站用户的MAC

    我正在寻找一种解决方案来查找使用 asp net 网站的用户的 MAC 号码 我知道你可以获得一个IP地址 不知道为什么 但它不会很复杂 但是我可以找出具有该IP的MAC地址吗 编辑 我的意思是在 NET中以编程方式 而不是手动 IP 地址
  • Godoc 文档不输出列表

    在整个项目中 我负责测试和记录 为函数和方法创建了文档 格式如下 CheckPermissionArray checks that values is an array that contains the expectedValue Par
  • Android 模拟器无法在 Eclipse 中启动

    我刚刚安装了整个 shebang 以便在 Eclipse 中开发 Android 应用程序 我运行的是 64 位 gentoo 一切似乎都很顺利 我创建了开发组的 hello world 示例 package com nfshost fly
  • 如何调整 svg 的大小(使用蜡染)并显示它?

    我有一个 100x100 像素的 svg 文件 例如 我正在使用蜡染 如果我做一个 JSVGCanvas svg new JSVGCanvas svg setSize 10 10 它只会显示图片的这一部分 而不显示调整大小的图像 你知道如何
  • 如何在 Core Data 中进行 NSManagedObject 的深度复制

    我正在尝试复制核心数据中现有的 NSManagedObject 和相关子对象 我似乎找不到一个简单的方法来做到这一点 我有一个从核心数据数据库填充的 NSArrayController 我想获取 SelectionIndex 处的对象并进行
  • 从 Zend Framework 2 中的路由获取 $_GET 参数

    Zend Framework 1 有一种非常简单的方法来解析 URL 路由并在 GET 超全局中设置找到的参数以便于访问 当然 您可以在控制器内使用 gt getParam something 但如果在 URL 中找到参数 则它是also可
  • 独立脚本可以为绑定到电子表格的另一个脚本创建触发器吗?

    我正在尝试为电子表格绑定脚本创建一个可安装的 onEdit 触发器 我想使用单独的独立脚本以编程方式执行此操作 根据文档看来这应该是可能的 请注意 与简单的 onOpen 触发器不同 可安装触发器的脚本不需要绑定到电子表格 要从独立脚本创建
  • 今天的google doodle世界博览会是如何实现的? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我想知道它
  • Javascript,CSS:将变换原点更改为手势更改的中心点

    我想将变换原点更改为捏合手势的中心点 此工作代码 safariDevSample 应用缩放和旋转而不改变transform origin window angle 0 global to store data for later reset