javascript – CSS在停留在容器内时旋转元素

前端之家收集整理的这篇文章主要介绍了javascript – CSS在停留在容器内时旋转元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果你看一下: http://jsfiddle.net/KA4dz/

在此演示中,您可以清楚地看到内部元素由于其旋转而到达外部元素的外部.要求是缩小内部元素(同时保持纵横比和中心定位),使其适合其容器.

用例是用户可以手动旋转这样的内部元件,同时确保它保持在外部元件内. (所以简单地缩小直到它适合眼睛不是一个解决方案).

这是一个我的数学技能显然缺乏的场景.发布我试过的东西在这个阶段不会做得很好.有人能指出我正确的方向吗?

谢谢!

另外一个要求是内部元素只在需要时缩小,但在不需要时则不缩小(必要时意味着离开外部元素的边界)

要保存点击:

.outer{
    border: 1px solid black;
    width: 100px;
    height: 50px;
    margin: 100px;
}

.inner{
    background: blue;
    width: 100px;
    height: 50px;

    transform: rotate(-40deg);
    -webkit-transform: rotate(-40deg);
}

<div class="outer">
    <div class="inner">
    </div>
</div>

解决方法

这很有趣.这是我的解决方案: http://jsfiddle.net/fletiv/jrHTe/

而javascript看起来像这样:

(function () {

var setRotator = (function () {

    var setRotation,setScale,offsetAngle,originalHeight,originalFactor;

    setRotation = function (degrees,scale,element) {
        element.style.webkitTransform = 'rotate(' + degrees + 'deg) scale(' + scale + ')';
        element.style.transform = 'rotate(' + degrees + 'deg) scale(' + scale + ')';
    };

    getScale = function (degrees) {

        var radians = degrees * Math.PI / 180,sum;

        if (degrees < 90) {
            sum = radians - offsetAngle;
        } else if (degrees < 180) {
            sum = radians + offsetAngle;
        } else if (degrees < 270) {
            sum = radians - offsetAngle;
        } else {
            sum = radians + offsetAngle;
        }

        return (originalHeight / Math.cos(sum)) / originalFactor;
    };

    return function (inner) {

        offsetAngle = Math.atan(inner.offsetWidth / inner.offsetHeight);
        originalHeight = inner.offsetHeight;
        originalFactor = Math.sqrt(Math.pow(inner.offsetHeight,2) + Math.pow(inner.offsetWidth,2));

        return {

            rotate: function (degrees) {
                setRotation (degrees,getScale(degrees),inner);
            }
        }
    };

}());

var outer = document.getElementById('outer'),inner = document.getElementById('inner'),rotator = setRotator(inner),degrees = 0;

window.setInterval(function () {
    degrees += 1;

    if (degrees >= 360) {
        degrees = 0;
    }

    rotator.rotate(degrees);
},50);

}());

编辑:这是一个试图解释我的代码逻辑的图像.

猜你在找的JavaScript相关文章