如何使用Snap Svg触发?

Nor*_*orx 6 jquery svg

似乎触发事件不适用于snap.svg

基本上我想要的是触发一个click事件,但似乎没有使用snap.svg或我做错了什么.

我无法解决它.

那怎么办呢?

的jsfiddle

var s=Snap("#svg");
var rect=s.rect(0, 0, 100,600)
rect.attr({ 
fill:"#212121"
});

var animating = true;

function aniOn() {
  if (animating) {
    rect.animate({
      width: 400
    }, 1000, mina.elastic);
  };
}

function aniOff() {
  if (animating) {
    rect.animate({
      width: 100
    }, 1000, mina.elastic);
  };
}
rect.click(function() {
  animating = true;
  aniOn()
});

rect.mouseout(function() {
  animating = true;
  aniOff()
});
$("#button").click(function() {
  rect.trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
html,
body {
  height: 100%;
  width: 100%;
  margin: 0;
  padding: 0;
}
#svg {
  position:absolute;
}

#button {
  margin-left:200px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/snap.svg/0.3.0/snap.svg-min.js"></script>

<svg id="svg"  width="200" height="100%" >
</svg>
<button id="button">Click</button>
Run Code Online (Sandbox Code Playgroud)

Mi-*_*ity 2

rect不被 jQuery 识别为元素,您应该使用选择器来选择它,例如$('rect')或 如果您想更具体,并且您需要在函数和$('#svg rect')中执行此操作,因此它将类似于这:.click().trigger()

jsFiddle

var s=Snap("#svg");
var rect=s.rect(0, 0, 100,600)
rect.attr({ 
fill:"#212121"
});

var animating = true;


function aniOn() {
  if (animating) {
    rect.animate({
      width: 400
    }, 1000, mina.elastic);
  };
}



function aniOff() {
  if (animating) {
    rect.animate({
      width: 100
    }, 1000, mina.elastic);
  };
}
$('rect').click(function() {
  animating = true;
  aniOn();
  console.log('clicked!') // I've added this for demonstration purpose
});

rect.mouseout(function() {
  animating = true;
  aniOff()
});


$("#button").click(function() {
  $('rect').trigger('click');
});
Run Code Online (Sandbox Code Playgroud)
html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
#svg { position:absolute; }
#button { margin-left:200px; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/snap.svg/0.3.0/snap.svg-min.js"></script>
<svg id="svg"  width="200" height="100%" ></svg>
<button id="button">Click</button>
Run Code Online (Sandbox Code Playgroud)

  • 它作为 *纯* javascript `.click` 工作,而不是作为 jQuery 对象,如果你想要一个证明,请将这个 `rect.click(function()` 更改为 `rect.on('click', function()` ,即jQuery,你会得到一个错误“**`Uncaught TypeError: rect.on is not a function`**”,但是如果你这样写`$('rect').on('click', function() ` 你不会*得到那个错误,它会工作得很好 (2认同)