5

我得到了一个 Illustrator 图形,所有图形都是单独的形状(低于低分辨率屏幕截图),我需要在网站上使用它。

我需要为图形的各个部分设置动画,例如鸟儿飞翔、人和汽车移动以及灯光的开/关。

插画师图形

问题是,我该怎么做?我一直在研究 SVG、CSS 和 JQuery 动画。到目前为止,能够非常有效地使用 CSS 和 JQuery。

如果我能在有人重新调整浏览器窗口大小(响应式布局)时以某种方式使动画工作,那就太好了,这就是我开始研究 SVG 的原因。我还需要动画在不同浏览器之间广泛兼容。

有什么例子吗?你会推荐什么?

谢谢。

编辑:

我将使用 JQuery 和关键帧动画。我正在使用的 Jquery 动画功能是:


    function animatethis(targetElement, speed, options, options2) {
        $(targetElement).animate(options,
        {
            duration: speed,
            complete: function ()
            {
                targetElement.animate(options2,
                {
                    duration: speed,
                    complete: function ()
                    {
                        animatethis(targetElement, speed, options, options2);
                    }
                });
            }
        });
    };

使用示例:

animatethis($('.big-cloud1'), 40000, {'left': '+=120%'}, {'left': '-=120%'})

我还在计算重新调整浏览器大小时各个图像的大小。我基于全宽动画的最大比例。

这是此的代码:


// get main image
var mainImage = $('.main-bg');

// Create new offscreen image to test
var theImage = new Image();
theImage.src = mainImage.attr("src");

// Get accurate measurements from that.
var maxWidth = theImage.width;

jQuery.fn.resizeRatio = function(newHeight){
    // work out new ratio
    var currentWidth = $('.main-bg').width();
    var diff = maxWidth - currentWidth;
    var precent = diff / maxWidth;

    // get current image width
    var currentImage = new Image();
    currentImage.src = $(this).attr("src");
    var currentWidth = currentImage.width;

    // apply new width
    $(this).width(currentWidth - (currentWidth*precent))

}

var initAnimation = function(){
    $('#animation').imagesLoaded(function(){
        $('#animation img').not('.sun, .main-bg').each(function( index ) {
            $(this).resizeRatio()
        });     
    });
}
initAnimation()

$(window).resize(function(){
    initAnimation()
});
4

2 回答 2

1

你可以使用 svg 来调整大小和动画,比如这个
HTML

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 600 600" preserveAspectRatio="xMidYMid"  style="width:100%; height:100%; position:absolute; top:0; left:0; z-index:-1;">
<g id="targets">
    <g id="red">
        <rect id="rect_red" x="110" y="115" width="64" height="64" rx="8" ry="8" fill="#FF173D" stroke="#000000" transform="translate(-108, -114)" />
        <animateMotion id="animation_red" begin="0" end="indefinite" dur="10s" repeatCount="indefinite" path="M 0 0 H 500 Z"></animateMotion>
    </g>
    <g id="blue">
        <rect id="rect_blue" x="110" y="115" width="64" height="64" rx="8" ry="8" fill="#0000aa" stroke="#000000" />
        <animateMotion id="animation_blue" begin="indefinite" end="indefinite" dur="10s" repeatCount="indefinite" path="M 0 0 H 500 Z"></animateMotion>
    </g>
    <g id="gree">
        <rect id="rect_green" x="10" y="300" width="64" height="64" rx="8" ry="8" fill="#00aa00" stroke="#000000" />
        <animateMotion id="animation_green" begin="indefinite" end="indefinite" dur="5s" repeatCount="indefinite" path="M 0 0 H 300 Z"></animateMotion>
    </g>
</g>
</svg>    

您可以使用属性开始动画,例如“rect_red”
,或者您可以使用 javascript 像这样开始动画

//jQuery    
$(document).ready(function () {
$("#rect_blue").click(function(){
     $("#animation_blue").get(0).beginElement();
});
$(window).resize(function(){
     $("#animation_green").get(0).beginElement();
});
});    
//or javascript    
document.getElementById('rect_blue').addEventListener("click", function(){
    document.getElementById('animation_blue').beginElement();
}, false);
window.addEventListener("resize", function(){
    document.getElementById('animation_green').beginElement();
}, false);    

您可以使用 css 像这样设置 svg 元素的样式

#rect_blue:hover{
    fill:#0000ff;
    cursor:pointer;
}
#rect_red:hover{
    fill:#aa0000;
    cursor:pointer;
}    

http://jsfiddle.net/Kv8Ju/1/

于 2013-10-30T16:20:42.150 回答
1

我没有使用 SVG 的经验。

但是,我可能会使用 CSS 和 jQuery 制作类似的东西。使用百分比调整 CSS 中的图像大小,您可能可以在所有不同类型的屏幕上使用它。但是,要使所有这些都很好地协同工作,需要做很多工作。

所有的 jQuery 也需要以百分比来完成,或者你需要在调整大小时让事情发生。

jQuery(window).resize(function(){
    // Do your magic
});

由于您主要需要处理图像的宽度而不是高度,因此我可能会使用以下 CSS:

img {
    width: (certain amount in percentages)
    height: auto;
}

这将确保图像保持正确的比例。(但我猜你已经知道了,考虑到你正计划开发这样一个项目)。

如果您需要我详细说明我的想法,我很乐意这样做。然而,除此之外,我认为没有更好/更快的方法来做到这一点(除非你认为 Flash 是一种好方法)。

于 2013-10-30T15:35:17.337 回答