いくつかの問題が発生していましたが、最終的に機能させることができました。this.each()
目的を果たせなかったので、関数を削除しました。また、上、右、下、左の計算を括弧で囲む必要がありました。視覚的な目的で、jsFiddle で、.arrows { background-color: red; }
処理する画像がなかったのでクラスを作成しました。
注意事項:
options.MouseOver
使用されることはありません。
options.Fade
プラグインでの処理方法により、最初の呼び出しにoptions.FadeSpeed
基づいています。.AddArrow()
.hover()
You may want to consider adding .stop(true,true)
before your fadeIn/fadeOut call on hover to eliminate animation queuing.
Click here to view jsFiddle demo:
(function( $ ){
$.fn.AddArrow = function(options) {
var defaults = {
ArrowHeight: '32',
ArrowWidth: '32',
ArrowPath: 'images/arrow.png',
Orientation: 'Top',
Fade: true,
FadeSpeed: 300,
MouseOver: true
};
var o = $.extend(defaults, options);
var pos = this.position();
var width = this.width();
var height = this.height();
switch (o.Orientation) {
case "Top":
this.append($('<img>', {
src: o.ArrowPath,
alt: "Arrow-Top",
class: "arrows",
style: "height: "+o.ArrowHeight+"px; width: "+o.ArrowWidth+"px; top: "+pos.top+"px; left: "+((width / 2) + pos.left)+"px; position: absolute; display: none;"
}));
break;
case "Right":
this.append($('<img>', {
src: o.ArrowPath,
alt: "Arrow-Right",
class: "arrows",
style: "height: "+o.ArrowHeight+"px; width: "+o.ArrowWidth+"px; top: "+(pos.top + (height / 2))+"px; left: "+(width + (pos.left - o.ArrowWidth))+"px; position: absolute; display: none;"
}));
break;
case "Bottom":
this.append($('<img>', {
src: o.ArrowPath,
alt: "Arrow-Bottom",
class: "arrows",
style: "height: "+o.ArrowHeight+"px; width: "+o.ArrowWidth+"px; top: "+(pos.top + (height - o.ArrowHeight))+"px; left: "+((width / 2) + pos.left)+"px; position: absolute; display: none;"
}));
break;
case "Left":
this.append($('<img>', {
src: o.ArrowPath,
alt: "Arrow-Left",
class: "arrows",
style: "height: "+o.ArrowHeight+"px; width: "+o.ArrowWidth+"px; top: "+(pos.top + (height / 2))+"px; left: "+pos.left+"px; position: absolute; display: none;"
}));
break;
}
if(o.Fade) {
this.hover(function() {
$(".arrows").fadeIn(o.FadeSpeed);
}, function() {
$(".arrows").fadeOut(o.FadeSpeed);
});
}
}
})( jQuery );