点坐标在fam.us中转换为特定曲面
Point coordinate translate to specific Surface in Famo.us
我们有一个相当复杂的web应用程序内置在流星。UI主要在嵌套的HTML元素中。现在我们正尝试用Famo重写UI。所以我们可以有更好的性能,以及添加伟大的动画效果。我们应用中的一个特性是,当用户在元素A上拖动时,我们需要根据鼠标事件在B中的精确位置绘制一个新的元素B,也就是说,我们需要计算任何元素中点的坐标,即使元素有复杂的变换。我们在webkit浏览器(我们只支持webkit)中使用' webkitconvertpointfrommpagetonode '函数来完成这项工作。Famo。us有一个类似的函数,所以我可以计算一个特定曲面上的点坐标。或者你对如何用当前的API实现这些功能有什么建议吗?
谢谢
考虑到Famo中的转换。我们都有绝对定位的支持,在任何给定的表面上找到坐标都是非常简单的。在Event对象中,你可以获取目标表面的偏移量x和偏移量y。
看看这个例子…
希望有帮助!
var Engine = require('famous/core/Engine');
var Surface = require('famous/core/Surface');
var StateModifier = require('famous/modifiers/StateModifier');
var Transform = require('famous/core/Transform');
var context = Engine.createContext();
var surface = new Surface({
size:[200,200],
properties: {
backgroundColor:'green',
color:'white',
textAlign:'center',
lineHeight:'200px'
}
})
surface.on('mousemove',function(e){
surface.setContent("x: "+e.offsetX+", y: "+e.offsetY);
})
surface.state = new StateModifier({
transform: Transform.translate(100,100,0)
})
context.add(surface.state).add(surface);
我已经找到了正确的方法。
首先,我深入研究了我在评论中提到的问题,即offsetX/offsetY值实际上是基于子表面的。因为offsetX/offset值是由DOM的MouseEvent生成并复制到famo中的。我们没有修改。DOM不提供'currentTarget'上鼠标点的坐标。它只提供'target'的值,即事件发生的元素。因此,我们只能在视口中使用clientX/clientY坐标,然后计算目标元素上该点的坐标。也没有官方的API来进行计算。只有webkit提供了' webkitconvertpointfrommpagetonode ' api来做这件事,因为布局引擎知道所有关于特定元素的位置和转换。
但后来我意识到Famo。我们知道每个曲面的变换!在呈现树中,从根上下文到RenderNode的路径上的所有修饰符构成了该节点及其下节点的转换。我们可以将它们相乘得到一个变换矩阵m,然后我们可以做一个坐标系变换来计算点在节点的局部坐标系中的右坐标。
但Famo。us没有直接的API来获取节点的所有修饰符,我自己在代码中完成了。我建议Famo。我们在每个RenderNode上添加一个"父"引用,然后我们可以很容易地为任何节点获得它们。
花了我一点时间,但这对我来说很有效:
var myX=event.clientX;
var myY=event.clientY;
for(var i=0;i<event.path.length;i++)
{
if(event.path[i].style===undefined)
continue;
var matrix=event.path[i].style.transform;
var matrixPattern = /^'w*'(((('d+)|('d*'.'d+)),'s*)*(('d+)|('d*'.'d+))')/i;
if (matrixPattern.test(matrix)) {
var matrixCopy = matrix.replace(/^'w*'(/, '').replace(')', '');
myX-=matrixCopy.split(/'s*,'s*/)[12];
myY-=matrixCopy.split(/'s*,'s*/)[13];
}
}
使用对齐和大小修改符
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何将TypeScript对象转换为普通对象
- 检测个位数整数时正在转换毫秒
- 从javascript到jquery的转换
- DOM事件通过JSON转换为java
- 将圆柱体转换为弯管
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- JavaScript代码问题:我正在将对象转换为数组
- 点坐标在fam.us中转换为特定曲面
- 拖动一个Famous曲面,并使其在mouseup上转换回原点