Witam
Postanowiłem nauczyć się pisać własne pluginy do jQuery, na początek wymyśliłem tooltip. Jednak przystanąłem na pewnym problemie, szukam i szukam i nie mogę trafić na rozwiązanie.
Firebug zgłasza błąd:
F is undefined jquery-1.3.2.min.js (wiersz 19)Próbowałem już w różnej kolejności, ciągle jest coś nie tak. W necie są tutki jak pisać pluginy, tyle, że takie proste, z jedną funkcją.
<?php
<script type="text/javascript">
/**
* Copyright (c) 2008 Vokiel vokiel.com
* @name Vtip VokielToolTip
* @author Vokiel
* Licensed under the MIT:
* <a href=\"http://www.opensource.org/licenses/mit-license.php\" target=\"_blank\">http://www.opensource.org/licenses/mit-license.php</a>
*/
;(function($){
/**
* Vtip
*/
$.fn.Vtip = function(options){
/**
* Ustawienia domyślne
*/
var defaults = {
moving: true,
tipclass: 'jquery_tooltip_show_2',
usetipclass: false,
container: '.container',
tipL: 10,
tipT: 20,
css: {
'display': 'block',
'position': 'absolute',
'width': '250px',
'border': '1px solid #09547B',
'background-color': '#B6DBED',
'color': '#000',
'text-align': 'left',
'padding': '5px',
'font-weight': 'normal'
}
};
// rozszerzenie domyslnych ustawien
defaults = $.extend(true, {}, defaults, options);
// iteracja po wszystkich pasujących elementach
return this
.each(function(e
) { var $this = $(this);
$this.livequery(function(){
var span = $('<span />').attr('class',defaults.tipclass);
if (defaults.usetipclass==false){span.css(defaults.css);}
$this.after(span.html($this.attr('title')).hide()).attr('title', '');
}).live('mouseover',ShowTooltip($this,e))
.live('mouseout', HideTooltip($this))
.live('mousemove',MoveTooltip($this,e));
});
/**
* Pokazanie tooltipa
*/
function ShowTooltip($this,e){
var text
= $this.next(defaults
.tipclass
); dim = DimentionsTooltip(e);
text.css({top:dim['t'],left:dim['l'],opacity: 0.9}).fadeIn();
}
/**
* Ukrycie tooltipa
*/
function HideTooltip($this){
var text
= $this.next(defaults
.tipclass
); text.fadeOut('fast');
}
/**
* Przesuwanie tooltipa wraz z ruchem myszki
*/
function MoveTooltip($this,e){
dim = DimentionsTooltip(e);
$this.next(defaults
.tipclass
).css
({top
:dim
['t'],left
:dim
['l']}); }
/**
* Wyliczenie nowej pozycji tooltipa
*/
function DimentionsTooltip(e){
var wW = $(window).width();
var topT
= Math
.ceil(e
.pageY
+defaults
.tipT
); var leftT
= Math
.ceil(e
.pageX
-$
(defaults
.container
).offset
().left
+defaults
.tipL
); if (leftT+250>wW) leftT = (wW-250);
dim['l'] = leftT+ 'px'; dim['t'] = topT+ 'px';
return dim;
}
};
})(jQuery);
$(document).ready(function(){
$('.jquery_tooltip_2').Vtip();
});
</script>
<a class="jquery_tooltip_2" title="<table border='0'><tr><td class='gropup bb'> </td><td class='bb'><strong>login</strong></td></tr></table>">test</a>
<a class="jquery_tooltip_2" title="<table border='0'><tr><td class='gropup bb'> </td><td class='bb'><strong>login</strong></td></tr></table>">test</a>
?>
Już sam nie wiem jaki powinien być wzrór pluginu, spotkałem się z wieloma różnymi, np:
<?php
<script type="text/javascript">
;(function($){
$.fn.Vtip = function(options){
var defaults = {};
defaults = $.extend(true, {}, defaults, options);
return this
.each(function(e
) { var $this = $(this);
// kod
});
// metody prywatne
function ShowTooltip(){}
function HideTooltip(){}
};
// metody publiczne
$.fn.Vtip.prywatna = function() {};
})(jQuery);
/** Albo tak: */
(function($){
$.fn.extend({
Vtip: function() {
return $();
// gdzie umieścić metody? tutaj
prywatna: function(){}
}
});
})(jQuery);
/** Inny sposób */
(function($) {
$.fn.Vtip = function(o) {
return this
.each(function() {}); };
$.extend(Vtip.prototype, {
functionA : function() {},
functionB : function() {}
}
})(jQuery);
/** Jeszcze dwa */
(function($) {
$.fn.Vtip = function(o) {
return this
.each(function() { // metoda prywatna
var functionA = function () {}
});
};
})(jQuery);
(function($) {
$.fn.Vtip = function(o) {
return this
.each(function() {}); };
$.fn.extend ({
functionA : function () {}
});
})(jQuery);
</script>
?>
Poza tym czasem jest średni na początku przed
;(function($) { czasem go nie ma.
I jeszcze jedno na konieć, jak mam przekazać parametr event? Czy po prostu przez function(e) a następnie wywołanie
DimentionsTooltip(e)?
Może jest ktoś bardziej doświadczony ode mnie w tym temacie i ma sprawdzony, działający sposób?
Pozdrawiam