最初の jQuery プラグインを完成させた後、このプラグインの開発を開始しました。しかし、どういうわけかこのプラグインは動作しません..プラグイン作成のすべてのルールに従っていると確信しているため、何が問題なのか本当にわかりません。
編集:「機能しない」とは、Web ページの要素に何も起こらないことを意味します。エラーを返すことさえありません。それはうまくいきません。
jQuery プラグインは、通常の JavaScript ソースに基づいています。実際の例はこちら
で、jsfiddleはこちらで確認できます。
例は、jQuery プラグインではなく、javascript で作成されています
これは私のプラグインです
;(function($){
// We name the function loader
$.fn.loader = function (options) {
// Default settings - can be replaced by options
var defaults = {
speed: 5,
width: 50,
height: 50,
totalFrames: 19,
frameWidth: 50,
color: 'white',
loaderTimeout: false,
index: 0,
Xpos: 0,
frameDelay: 0
}
// Extend the options and defaults to variables
var opts = $.extend(defaults, options);
// We locate the loader Image
var loaderImage = '../../_resources/loading/loading_sprites_'+ opts.color + '_' + opts.height + '.png';
// Now start the Function
return this.each(function() {
// The original element is defined with a variable
var element = $(this);
var frameDelay = opts.frameDelay;
// We start out by defining the beginning of the animation
function startLoader() {
// The element is giving the right width and height to contain
// the loading animation, and the loaderImage source as background
element.width(opts.width).height(opts.height).css('background-image', 'url('+loaderImage+')');
// We calculate the Frames Per Second
FPS = Math.round(100/opts.speed);
frameDelay = 1 / FPS;
// And start the animation
setTimeout('continueAnimation()', frameDelay / 1000);
}
// To keep the animation on going we need to define a function
// that continuesly repeat the sprites
function continueAnimation() {
var Xpos = opts.Xpos;
var index = opts.index;
// The X-position is defined based on how wide the frame is
Xpos += opts.frameWidth;
// index is defined by continuelsy counting
index += 1;
// if index counts to more or equal to the amount of frames defined
if (index >= opts.totalFrames) {
Xpos = 0; // ... we set the X-position to be 0
index = 0; // ... and the index too
}
// We change the position og the sprite to give the illusion
// of an animation going on
element.css('background-position', Xpos + 'px 0');
// And finally we are going to ask our function to repeat itself.
setTimeout('continueAnimation()', frameDelay * 1000);
}
// Before anything we want the sprites to be pre-loaded
function imageLoader(source, start) {
var loaderTimeout = opts.loaderTimeout;
// First we clear Timout
clearTimeout(loaderTimeout);
loaderTimeout = 0;
// Then we generate a new image (the sprites)
genImage = new Image();
// When the image is loaded we want to start the animation
genImage.onload = function() {loaderTimeout = setTimeout(start, 0)};
// If we can't locate the sprite image, we prepare an error function
genImage.onerror = new Function('alert(\'Could not load the image\')');
// And we define the image source
genImage.src = source;
}
// This command starts the whole animation
new imageLoader(loaderImage, 'startAnimation()');
});
}
})(jQuery);
プラグインを次のように呼び出します。
$(document).ready(function() {
$('.loader').loader({
color: 'blue'
})
});