Lovelock Lovelock - 5 months ago 14
Javascript Question

spin.js - Can't remove the spinner?

I can't seem to stop this spinner no matter what I try.

I have searched around for the way to do it but nothing I have tried works.

Fiddle:

http://jsfiddle.net/gmvT4/5/

Backup code:

var opts = {
lines: 13, // The number of lines to draw
length: 5, // The length of each line
width: 2, // The line thickness
radius: 5, // The radius of the inner circle
corners: 1, // Corner roundness (0..1)
rotate: 58, // The rotation offset
direction: 1, // 1: clockwise, -1: counterclockwise
color: '#fff', // #rgb or #rrggbb or array of colors
speed: 0.9, // Rounds per second
trail: 100, // Afterglow percentage
shadow: false, // Whether to render a shadow
hwaccel: false, // Whether to use hardware acceleration
className: 'spinner', // The CSS class to assign to the spinner
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '50%', // Top position relative to parent
left: '50%' // Left position relative to parent
};

var target = document.getElementById('foo');

$(document).on('click', '#spin', function () {
var spinner = new Spinner(opts).spin(target);
});

$(document).on('click', '#stop', function () {
$("#foo").data('spinner').stop();
});

<div id="foo"></div>
<button id="spin">Spin!</button>
<button id="stop">Stop!</button>


Thanks for any help! Craig.

Answer

Uncaught TypeError: Cannot read property 'stop' of undefined

This error tells you something. You're trying to run .stop() on $("#foo").data('spinner'). Instead, use the instance created by spinner, which you'll need to first declare outside of the scope of that click event.

var spinner;

$(document).on('click','#spin',function(){
  spinner = new Spinner(opts).spin(target);
});

$(document).on('click','#stop',function(){
  spinner.stop();
});

Updated fiddle c/o René Roth