2014-05-25 4 views
0

Snap.svg를 클릭하면 애니메이션의 기본 코드를 작성합니다. 이 모양은 다음과 같습니다.Snap.svg로 두 번째 클릭시 무언가하기

var s = Snap(500, 500); 

var circle = s.rect(100,100,100,100); 

circle.click(function(){ 
    var width = circle.attr('width'); 
    var height = circle.attr('height'); 

    circle.animate({ 
    width: width/2, 
    height :height/2 
    }, 2000); 


}); 

컨테이너의 왼쪽 상단 모서리에 사각형을 만들고 클릭하면 그 너비를 애니메이션으로 나타냅니다. 그런 다음 두 번째 클릭시 다른 것을하고 싶습니다. 예를 들어 원래 상태로 되돌립니다.

나는 또한 자바 스크립트에서이 두 번째 클릭을 어떻게 처리하는지 배우게되어 기쁩니다. 예 :이 버튼을 한 번 누르면 슬라이드 탐색이 열립니다. 두 번 탭하면 탐색이 사라집니다.

미리 감사드립니다.

답변

0

클릭 상태를 저장하고 싶을 수 있습니다.

이것에 대해 이동하는 방법에는 여러 가지가 있습니다,하지만 난 두를 선택할 수 있습니다 :

은 (말하자면 counter)를 카운터 변수를 만들고 그것에게 click 핸들러가 실행될 때마다 증가. 숫자가 짝수 또는 홀수 인 경우, 때마다, 무엇을 결정하기 위해, 참조 :

var counter = 0; 
circle.click(function(){ 
    if(counter % 2 == 0){ 
    //action1 
    }else{ 
    //action2 
    } 
    counter++; 
}); 

다른 방법으로 수행 할 수있는 작업을 추적 할 때마다 변경 부울을 사용할 수 있습니다.

var flag = true; 
circle.click(function(){ 
    if(flag){ 
    //action1 
    flag = false; 
    }else{ 
    //action2 
    flag = true; 
    } 
}); 
+0

좋은 해결책이 있지만 이미이 방법이 기본 제공되어 있으므로 수동으로 카운터를 추가 할 필요가 없습니다. 내장 된 솔루션에 대한 내 대답을 참조하십시오. – Joeytje50

+0

@ Joeytje50 True; 그냥 대안. 재미있는, 그러나 : 나는 그것을하는 내장 된 방법에 대해 몰랐다. – AstroCB

+0

내가 이벤트를 발견했을 때 [스페이스 바를 구별/집중 버튼을 눌러 프레스 및 클릭하는 방법] (http://stackoverflow.com/a/20849411/1256925)을 찾을 때까지는 아무 것도하지 않았습니다. 세부 사항'. 나는 많은 것들이 그것없이 그것보다 훨씬 더 쉽게 할 수 있기 때문에 나는 나의 대답의 전체 묶음에서'event.detail'을 이미 언급했다. 추신 : 내 대답에서 뭔가를 배운 경우 upvote하시기 바랍니다;) – Joeytje50

1

event.detail 속성을 사용하면됩니다. 귀하의 경우에는, 그는 다음과 같습니다 사용자가 더블 클릭을 수행 할 때

circle.click(function(e) { 
    var width = circle.attr('width'); 
    var height = circle.attr('height'); 
    if (e.detail == 1) { 
    circle.animate({ 
     width: width/2, 
     height :height/2 
    }, 2000); 
    } else if (e.detail == 2) { 
    circle.animate({ //example 
     width:width, 
     height:height 
    }, 2000); 
    } 
}); 

이 애니메이션이 다시 원래 크기로 변경 재생하기 (빠른 그래서 배). 당신은 기본적으로 대신 더블에 되 돌리는의, 요소를 전환하려면 요소가 아닌 다른 width 또는 height 스타일을 가지고 있다면, 당신은 간단하게 확인할 수 있습니다 초기 width 또는 height :

circle.click(function(e) { 
    var width = circle.attr('width'); 
    var height = circle.attr('height'); 
    if (parseInt(this.style.width) == parseInt(width) || !this.style.width) { 
    circle.animate({ 
     width: width/2, 
     height :height/2 
    }, 2000); 
    } else { 
    circle.animate({ //example 
     width:width, 
     height:height 
    }, 2000); 
    } 
}); 

는 그 다음 if()는 true를 돌려줍니다 width 속성이 width 스타일과 같거나 width 스타일이 비어 있거나 정의되어 있지 않은 경우

+0

도움을 주셔서 감사합니다,하지만 클릭하고 직사각형 축소가있을 때, 나는 그것이 다시 작동하고 크기를 확대하기 위해 여러 번 마우스 버튼을 눌러야 만합니다. 또한 두 번째 클릭시 원본 크기와 곱 해져서 2 배 더 커집니다. 100 * 2 ... –

+0

제 편집을 참조하십시오. 간단한 토글 메커니즘에 대한 코드를 추가했습니다. 또한 원래 크기의 두 배로 증가하는 대신 정상으로 돌아갈 수 있도록 되 돌리는 너비와 높이를 고정했습니다. – Joeytje50

+0

이 개선 사항은 detail 속성을 사용하지 않고 Snaps Element 프로토 타입에 속한 data() 메서드를 사용한다고 생각합니다. 이벤트 내에 깃발을 넣을 수 있습니다. 예. (this.data ('clickCounter') == 0) {this.data ('clickCounter', 1);} else {this.data ('clickCounter', 0); }' –

관련 문제