Поворот изображения с помощью события перетаскивания мышью в Javascript - PullRequest
1 голос
/ 17 июля 2010

Я искал этот скрипт весь день. Кто-нибудь знает такой сценарий, который я могу использовать для поворота изображения с помощью события перетаскивания мышью. используя JavaScript.

спасибо заранее.

Ответы [ 4 ]

2 голосов
/ 17 июля 2010

Попробуйте это:

http://code.google.com/p/jqueryrotate/

0 голосов
/ 14 февраля 2014

Greensock обладает необычайной функциональностью.Взгляните на: https://www.greensock.com/draggable/ Прокрутите вниз, чтобы вращаться.К сожалению, это не полностью бесплатно.

0 голосов
/ 10 января 2011

Вот, пожалуйста. вот мое решение, оно работает только с IE для версии FF, вы узнаете, что эквивалентно объектам vml в FF и других браузерах:

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="yes">

<HEAD>
<script>
var dragok = false; 
var gotElementSelected = false;
var currentElement = null;

function move()
{
     if (dragok)
     {
        tempX = event.clientX + document.body.scrollLeft;
        tempY = event.clientY + document.body.scrollTop; 

        //rotating
        document.getElementById(currentElement).style.rotation=tempX+tempY;

        return false;
     }
}

function down(){
     dragok = true;
     if(gotElementSelected && currentElement !=null) 
        {
             document.onmousemove = move;
             return false;
        }
 }

function up()
{
    if(gotElementSelected && currentElement !=null)
        {    
            gotElementSelected = false;
            dragok = false;
            document.onmousemove = null; 
            currentElement = null;  
        }
}
</script>

<STYLE>.rvml {
    BEHAVIOR: url(#default#VML)
}
</STYLE>
</HEAD>

<BODY bgcolor=DDDDDD>
<?xml:namespace prefix = rvml ns = "urn:schemas-microsoft-com:vml" />
<rvml:image style="POSITION: absolute; WIDTH: 100px; DISPLAY: none; HEIGHT: 100px; TOP: 100px; LEFT:100px; rotation: 0" id=myimage class=rvml 
onmousedown="gotElementSelected=true; currentElement=this.attributes.getNamedItem('id').value; selectedElement=currentElement;" 
onclick="select_element(this.attributes.getNamedItem('id').value); selectedElement=this.attributes.getNamedItem('id').value;" 
src = "path/to/your/image" coordsize = "21600,21600"></rvml:image>
0 голосов
/ 09 января 2011

У меня есть идея внедрения, так как мне нужно будет написать и это, если у вас уже нет решения, поэтому я хотел бы иметь его:)

в любом случае, сделайте это:

/ ** edit: удалил мой псевдокод в пользу реального впереди ** /

в любом случае ... Я реализую это и дам вам знать.если, конечно, в течение следующих нескольких часов кто-нибудь отправит его реализацию :-) / ** edit: спасибо за тех, кто сделал ** /

ОБНОВЛЕНИЕ: вот оно, во всяком случае (поворот одного изображения над другим):) это работает отлично, просто сделайте небольшую очистку, если вы импортируете это.это кросс-браузер.

html:

<div id="centered" style=" /* margin-left:400px; computed in javacript*/ ">
    <img id="static" src="" style="position:absolute; z-index:-1">
    <img id="rotating" src="" >
</div>

включает:

// jquery.min.js, jQueryRotate.js (discussed above)

javascript:

var alpha=0
var dragOrig = null
var mouseInPic = new Point(0,0)
var diff
var imageNo = 0

function swapImage_or_something(i /* or get src from somewhere else*/) {

    $("#static").attr("src", arrCfgImages[i].src)
    $("#rotating").attr("src", arrCfgImages[i].src)


    $("#static").height(450);
    $("#rotating").height(450);

    $("#centered").css ({
        "margin-left": ($(document).width()-$("#static").width())/2 
    })

    $("#rotating").rotate(0)

}


function doEventBinding() {

    $(document).bind("mousedown", function (e) {
        dragOrig = new Point (mouseInPic.x, mouseInPic.y)

        e.preventDefault() 
        return 


    });
    $(document).bind("mouseup", function (e) {
        if (dragOrig) {
            dragOrig = null
            alpha+=diff
            diff=0
        }
    }); 
    $(document).bind("mousemove", function (e) {
        var x = -1*(Math.round($("#rotating").width()/2+0.01) - (e.pageX - $("#rotating").offset().left - (isIE ? 2 : 0)))
        var y = Math.round($("#rotating").height()/2+0.01) - (e.pageY - $("#rotating").offset().top - (isIE ? 2 : 0))
        mouseInPic = new Point(x,y) 

        if (dragOrig) {
            var cp = new Point(0,0)
            var deg1 = getAngleBetweenPoints(dragOrig, cp)
            var deg2 = getAngleBetweenPoints(mouseInPic, cp)
            diff = (deg1-deg2)
            diff = diff<0 ? diff+360 : diff>360 ? diff-360 : diff
            diff = diff>180 ? diff-360 : diff
            //my$("debug").innerHTML = diff
            $('#rotating').rotate(alpha+diff); 
            e.preventDefault() 
        }
    });

}

также:

var toRAD = 1/180*Math.PI;
var toDEG = 180/Math.PI;
    function getAngle(dx,dy) {
        var ang
        if (dx!=0) {
            var rad = Math.atan(dy/dx) + (dx<0?Math.PI:0)
            ang = rad*toDEG
            if (ang<0) ang+=360;
        } else {
            ang = dy>0 ? 90 : 270;
        }
        return ang;
    }

    function getAngleBetweenPoints (p1, p2) {
        var dx = p1.x-p2.x
        var dy = p1.y-p2.y
        return getAngle (dx, dy)
    }
...