【问题标题】:Javascript, css: change transform origin to centerpoint of gesturechangeJavascript,css:将变换原点更改为手势更改的中心点
【发布时间】:2014-04-02 07:05:34
【问题描述】:

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

此工作代码 (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();

我尝试使用touchstartgesturestart screenX screenY 作为额外的事件监听器,但没有成功。

【问题讨论】:

    标签: javascript css transform gesture css-transforms


    【解决方案1】:

    我猜我通过使用 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();
    

    谢谢

    汉斯

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2013-12-12
      • 2016-08-21
      • 1970-01-01
      • 2011-08-22
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多