将 svg 拟合到 angular.js 中的背景图像 div

Posted

技术标签:

【中文标题】将 svg 拟合到 angular.js 中的背景图像 div【英文标题】:Fitting an svg to background-image div in angular.js 【发布时间】:2014-12-10 19:40:28 【问题描述】:

如何将 SVG 作为背景图像适合大小可变的 DIV 容器? SVG 是动态生成的,所以我实际上需要将 DIV 容器的宽度和高度传递给生成 SVG 的 javascript 函数。

我正在使用 angular.js,所以我也想以正确的方式来做。 :)

没有太多要添加的 re: 代码,但本着需要代码示例的 SO 问题的精神,这里是我分配 SVG 的地方:

var str = 'url("data:image/svg+xml;utf8,'+s+'")';    
$("#token-creator").css('background-image': str, 'background-repeat':'no-repeat', 'background-opacity': .04);

【问题讨论】:

如果您创建宽度/高度为 100% 的 SVG,它的大小应适合其容器。 【参考方案1】:

如果您想以“Angular 方式”执行此操作,您应该考虑创建一个directive

JS - (指令)

app.directive('backImg', function()

    return function(scope, element, attrs)

        attrs.$observe('backImg', function(value) 

            var url = attrs.backImg;
            var size = attrs.backImgSize || 'cover';
            var width = attrs.backImgWidth;
            var height = attrs.backImgHeight;

            element.css(

                'background-repeat' : 'no-repeat',
                'background-image': 'url(' + value +')',
                'background-size' : size,
                '-webkit-background-size': size,
                '-moz-background-size': size,
                '-ms-background-size': size,
                'width': width,
                'height': height

            );

        );

    ;

);

标记(视图)

其中svg 是控制器中的$scope 变量:

<div back-img="svg" back-img-size="contain" back-img- back-img-></div>

Plunk:http://plnkr.co/edit/jw48qHwk7A2ctHBQT1TW?p=preview

【讨论】:

以上是关于将 svg 拟合到 angular.js 中的背景图像 div的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular JS 中用另一个 svg 图标动态替换 svg 图标?

如何在 Angular JS 中更改 SVG 的颜色

如何将分布拟合到 R 中的样本数据?

将 SVG 组件作为背景图像反应到 div

使用 VH 表示的高度对框 SVG 进行响应式拟合

使用 SVG 进行 2D 渲染和放大