3

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

有没有办法限制容器内的内容?

4

1 回答 1

4

您可以通过多种方式隐藏溢出 Kinetic Image 对象的内容

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

但是,您可以将图像放入 KineticJS 图像对象中,然后对图像进行操作。

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

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

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

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

当您将crop属性添加到 KineticJS Image 对象时,原始图像将根据您的规范进行裁剪。这将使您保留原始图像的所需部分并裁剪掉不需要的部分。

在此处输入图像描述

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>
于 2013-06-25T05:06:49.630 回答