javascript 使用preserveAspectRatio属性和svg.js将SVG居中

m2xkgtsf  于 2023-01-16  发布在  Java
关注(0)|答案(1)|浏览(141)

我正在使用svg.js,我试图在中间放置一个svg。我使用了属性preserveAspectRatio,但它不起作用。
我已经定义了viewbox,但是当我编写preserveAspectRatio时,最后一个SVG也消失了,我不知道为什么。
HTML结构为:

<div id="infobox">
    <div id="learning" class="infothree">
        <div id="learningCircle"></div>
        <h3>Educativo</h3>
    </div>
    <div id="everybody" class="infothree">
        <div id="everybodyCircle"></div>
        <h3>¡Niños y mayores!</h3>
    </div>
    <div id="store" class="infothree">
        <div id="storeCircle"></div>
        <h3>Tienda</h3>
    </div>
</div>

JS代码为:

var learn = SVG('learningCircle')
  var boxL = learn.viewbox(0, 0, 300, 200)
  var imageL = learn.image('http://distriker.com/lab/svg/learn.svg').loaded(function (loader){
  this.size(155)
  })
  var circleL = learn.circle(155).attr({
    fill: '#fff'
  })
  imageL.maskWith(circleL).attr('preserveAspectRatio', 'xMidYmid meet')

  var everybody = SVG('everybodyCircle')
  var boxE = everybody.viewbox(0, 0, 300, 200)
  var imageE = everybody.image('http://distriker.com/lab/svg/everybody.svg').loaded(function (loader){
  this.size(200)
  })
  var circleE = everybody.circle(155).attr({
    fill: '#fff'
  })
  imageE.maskWith(circleE).move(-20).attr('preserveAspectRatio', 'xMidYmid meet')

  var store = SVG('storeCircle')
  var boxS = store.viewbox(0, 0, 300, 200)
  var imageS = store.image('http://distriker.com/lab/svg/store.svg').loaded(function (loader){
  this.size(155)
  })
  var circleS = store.circle(155).attr({
    fill: '#fff'
  })
  imageS.maskWith(circleS).attr('preserveAspectRatio', 'xMidYmid meet')

我把所有东西都放进了jsFiddle
我希望有人能帮助我。

goqiplq2

goqiplq21#

如果查看控制台(按F12),您将看到一个错误:

Uncaught TypeError: undefined is not a function

而且,dev工具中的Net选项卡显示store.svg没有被加载。

    • 问题1**

代码的主要问题是这一行。

imageE.maskWith(circleE).move(-20).attr('preserveAspectRatio', 'xMidYMid meet')

move()需要两个参数,因此此错误导致代码在该点停止。代码的存储部分未运行。
如果将该行更改为:

imageE.maskWith(circleE).move(-20,0).attr('preserveAspectRatio', 'xMidYMid meet')

一切正常。

    • 问题2**

xMidYmid meet应该是xMidYMid meet(大写M)。但是这个错误没有影响,因为默认值是xMidYMid meet
Working example here

相关问题