KineticJS:隐藏溢出图层的内容

时间:2013-06-24 17:22:22

标签: kineticjs

我正在尝试将图片添加到画布,但要将其限制为它所放置的图层的大小。我为图层设置了widthheight,但它仍然没有做我想做的。如果内容在边框外可见,为什么有宽度和高度?

是否有限制容器内容的解决方案?

1 个答案:

答案 0 :(得分:4)

  

您可以通过多种方式隐藏溢出动态图像对象的内容

澄清:所有kineticJS层总是与舞台大小相同(不可更改)

但是,您可以将图像放在KineticJS图像对象中,然后操纵图像。

解决方案#1:使用图像对象offset属性:

您可以使用offset属性将KineticJS图像对象(如视口)用于更大的图像。如果您以后想要将视口移动到原始图像的另一部分,则此方法很有用。

解决方案#2:使用图像对象crop属性:

您可以裁剪较大的原始图像以适合较小的KineticJS图像对象。如果要永久查看原始图像的裁剪部分,此方法很有用。顺便说一句,如果你想缩放裁剪的部分,这个方法也很有用。

crop属性添加到KineticJS图像对象时,将根据您的规格裁剪原始图像。这样可以保留原始图像的所需部分并裁掉掉不需要的部分。

enter image description here

kImage=new Kinetic.Image({
    image:img,
    x:30,
    y:30,
    width:110,
    height:110,
    crop: {
        x: 150,
        y: 122,
        width: 110,
        height: 110
    }
});

这是代码和小提琴:http://jsfiddle.net/m1erickson/KbESf/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Prototype</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.5.1.min.js"></script>

<style>
#container{
  border:solid 1px #ccc;
  margin-top: 10px;
  width:300px;
}
</style>        
<script>
$(function(){

    var stage = new Kinetic.Stage({
        container: 'container',
        width: 300,
        height: 150
    });
    var layer = new Kinetic.Layer();
    stage.add(layer);

    var kImage;

    var img=new Image();
    img.onload=function(){
        addCroppedImage();
    }
    img.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/faces.png";

    function addCroppedImage(){

            kImage=new Kinetic.Image({
                image:img,
                x:30,
                y:30,
                width:110,
                height:110,
                crop: {
                    x: 150,
                    y: 122,
                    width: 110,
                    height: 110
                }
            });
            layer.add(kImage);
            layer.draw();
        }

}); // end $(function(){});

</script>       
</head>

<body>
    <p>Cropped image on Kinetic layer</p>
    <div id="container"></div>
    <p>Original Image</p>
    <img src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/faces.png">
</body>
</html>