Javascript,css:将变换原点更改为手势更改的中心点
Javascript, css: change transform origin to centerpoint of gesturechange
我想将变换原点更改为捏合手势的中心点。
这个工作代码(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
和 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();
感谢
汉斯
相关文章:
- 带有传单的可见GeoJSON路径的中心点
- 使旋转的中心点在中心
- 谷歌地图动态中心点PHP
- 多边形 围绕中心点绘制
- 谷歌地图:使用菜单设置新的中心点
- 从中心点开始的 SVG 路径动画
- 如何使用 Kineticjs 围绕中心点旋转图像
- 如何获取画布的中心点
- 谷歌地图API-偏移中心点,以确保标记和信息窗口可见
- 中心点在左上角
- 使用googlemapsapiv3查找给定中心点的地图边界
- 使用javascript从esri多点获取中心点
- 从中心点旋转html5画布文本
- 谷歌地图API v3:在保持中心点固定的情况下,使地图适应标记
- 拉斐尔围绕中心点的不规则路径
- 给定三个点,如何计算圆的中心点
- 在svg中心点获取问题
- 基于缩放级别和中心点创建latlnbounds
- 绘制与图像中心点相关的x,y的图像
- Javascript,css:将变换原点更改为手势更改的中心点