2016-11-08 63 views
0

我有一個SVG路徑動畫,目前在一個無限循環。我希望動畫在被點擊事件觸發之前是不可見的,然後一旦動畫完成(一次,而不是無限),該按鈕應該不再起作用。SVG路徑動畫開始點擊一個按鈕

我已經添加了一個測試按鈕,但動畫似乎在頁面加載後仍然播放,並且按鈕對它沒有影響。

$("#button").click(function() { 
 
    $('.dashed').toggleClass('path'); 
 
});
.dashed{ 
 
    stroke-dasharray: 10; 
 

 
} 
 
.path { 
 
    stroke-dasharray: 1000; 
 
    stroke-dashoffset: 1000; 
 
    animation: dash 5s linear infinite; 
 
} 
 

 
@keyframes dash { 
 
    from { 
 
    stroke-dashoffset: 1000; 
 
    } 
 
    to { 
 
    stroke-dashoffset: 0; 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 
 
\t width="612px" height="792px" viewBox="0 0 612 792" enable-background="new 0 0 612 792" xml:space="preserve"> 
 
<path class="path" fill="none" stroke="#000000" stroke-linejoin="round" stroke-miterlimit="10" d="M23.742,10.709 
 
\t c-2.305,23.611-8.81,46.563-9.021,70.829c-0.252,28.966,22.237,43.666,47.06,55.482c23.642,11.255,42.368,15.766,68.461,16.631 
 
\t c19.993,0.663,40.08,2.97,59.853-1.723c23.301-5.531,45.542-17.598,66.978-27.933c19.248-9.281,38.831-21.86,41.946-45.201 
 
\t c5.539-41.51-54.993-47.073-81.885-42.17C159.05,47.212,89.37,104.633,77.387,164.629c-5.896,29.522-4.312,60.884,12.703,86.354 
 
\t c19.17,28.697,49.512,49.927,78.596,67.591"/> 
 

 
<path class="dashed" fill="none" stroke="white" stroke-width="4" stroke-linejoin="round" stroke-miterlimit="10" d="M23.742,10.709 
 
\t c-2.305,23.611-8.81,46.563-9.021,70.829c-0.252,28.966,22.237,43.666,47.06,55.482c23.642,11.255,42.368,15.766,68.461,16.631 
 
\t c19.993,0.663,40.08,2.97,59.853-1.723c23.301-5.531,45.542-17.598,66.978-27.933c19.248-9.281,38.831-21.86,41.946-45.201 
 
\t c5.539-41.51-54.993-47.073-81.885-42.17C159.05,47.212,89.37,104.633,77.387,164.629c-5.896,29.522-4.312,60.884,12.703,86.354 
 
\t c19.17,28.697,49.512,49.927,78.596,67.591"/> 
 
</svg> 
 

 

 
<input type="button" id="button" value="Animate" />

回答

1

一)清空類.path但它保留下來:

.path { } 

b)添加動畫屬性你將.path從動畫屬性中的'infinite'替換爲'1',將其從.path中移除爲新的css類。

.path-animation { 
    stroke-dasharray: 1000; 
    stroke-dashoffset: 1000; 
    animation: dash 5s linear 1; 
} 

c)用下面的jQuery來實現你需要的信息:

$("#button").click(function() { 
    $('.path').attr('class', 'path path-animation'); 
    //5 secs delay to complete the animation before removing it and disabling the button. 
    setTimeout(function() { 
     $('.path').attr('class', 'path'); 
     $("#button").attr("disabled","disabled"); 
    }, 5000); 
}); 

示例代碼:http://codepen.io/Nasir_T/pen/yVNxQG

+0

有讓您jquery.min.js,也是我沒有看到JS代碼在你的頁面上。 –

+0

忘了添加$(document).ready(function(){。感謝您的幫助! – user3005003

0

你需要這些小的變化做你的代碼:

1)首先除去從現有<path class="path"你的第一個<path>元素。你想按鈕添加這個稍後onclick

2)改變你的動畫迭代計數從你的animation: dash 5s linear infinite; - '無限'在這裏說迭代動畫無限的時間。改變,要animation: dash 5s linear 1;

.path { 
    stroke-dasharray: 1000; 
    stroke-dashoffset: 1000; 
    animation: dash 5s linear 1; 
} 

3)然後以第一次點擊後禁用按鈕,你可以

$('#button').on('click', function() { 
    $('.dashed').addClass('path'); 
    $(this).prop('disabled', true); 
}); 

簡單..讓我知道,如果你面對任何問題。