Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Snap.SVG对单个SVG元素做出独特的响应?_Javascript_Svg_Snap.svg - Fatal编程技术网

Javascript 如何使用Snap.SVG对单个SVG元素做出独特的响应?

Javascript 如何使用Snap.SVG对单个SVG元素做出独特的响应?,javascript,svg,snap.svg,Javascript,Svg,Snap.svg,我已经找了几个小时了,但没有任何东西(包括相关的StackOverflow线程)能让我更接近。这个问题看起来很简单,但它显然不是基于我所能找到的信息的缺乏 我正在尝试使用Snap.svg制作一个交互式钢琴,您可以单击每个键,它将播放各自的音符。到目前为止,我已经尝试了两种方法: 方法1: 一个简单的FOR循环,用于生成所有rect并添加事件侦听器 <script> window.onload=init(); var S=Snap(500,100); var w=15;

我已经找了几个小时了,但没有任何东西(包括相关的StackOverflow线程)能让我更接近。这个问题看起来很简单,但它显然不是基于我所能找到的信息的缺乏

我正在尝试使用Snap.svg制作一个交互式钢琴,您可以单击每个键,它将播放各自的音符。到目前为止,我已经尝试了两种方法:

方法1: 一个简单的FOR循环,用于生成所有rect并添加事件侦听器

<script>
  window.onload=init();
  var S=Snap(500,100);
  var w=15;  var h=100;

  function init() {
    for (i=0;i<10;i++) {
      S.rect(i*w,0,w,h).attr{(id:i)}.click(console.log(this.id));
    }
  }
</script>

window.onload=init();
var S=Snap(500100);
var w=15;var h=100;
函数init(){

对于(i=0;i,这里有一种方法包括两种方法。在第一个示例中,括号中的attr错误

此外,单击处理程序必须将函数作为参数,这样“this”将是正确的

编辑:我添加了两种可以从不同角度使用的方法

 r.data('key', new Key( i )); 
将对象作为数据元素关联到捕捉对象

 r.click( clickHandler.bind(r, key2));
将对象绑定到处理程序,以便将其作为参数传递

这是全部内容。根据哪种方法效果最好,您可以将其缩短一点

var w=15;  var h=100;

function altKey( id ) {
   this.id='anotherkeymethod ' + id;
};

function Key(id ) {
    this.id='key' + id;
};

function init() {
    var r, key2;

    for (i=0;i<10;i++)      {
        key2 = new altKey( i );

        r = S.rect(i*w,0,w,h)
             .attr({ id:i, fill: 'blue' });

        r.data('key', new Key( i ));          // Method 1
        r.click( clickHandler.bind(r, key2)); // Method 2

    }
  }

function clickHandler( myKeyEl ) {
    console.log(this.id, this.data('key'), myKeyEl);
};

init();
var w=15;var h=100;
功能键(id){
this.id='anotherkeymethod'+id;
};
功能键(id){
this.id='key'+id;
};
函数init(){
var r,键2;
对于(i=0;i
var w=15;  var h=100;

function altKey( id ) {
   this.id='anotherkeymethod ' + id;
};

function Key(id ) {
    this.id='key' + id;
};

function init() {
    var r, key2;

    for (i=0;i<10;i++)      {
        key2 = new altKey( i );

        r = S.rect(i*w,0,w,h)
             .attr({ id:i, fill: 'blue' });

        r.data('key', new Key( i ));          // Method 1
        r.click( clickHandler.bind(r, key2)); // Method 2

    }
  }

function clickHandler( myKeyEl ) {
    console.log(this.id, this.data('key'), myKeyEl);
};

init();