Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jQuery] Pisanie własnych pluginów do jQuery, Tooltip plugin
vokiel
post
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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ą.

  1. <?php
  2. <script type="text/javascript">
  3. /**
  4.  * Copyright (c) 2008 Vokiel vokiel.com
  5.  * @name Vtip VokielToolTip
  6.  * @author Vokiel
  7.  * Licensed under the MIT:
  8.  * <a href=\"http://www.opensource.org/licenses/mit-license.php\" target=\"_blank\">http://www.opensource.org/licenses/mit-license.php</a>
  9.  */
  10. ;(function($){
  11.    /**
  12.      * Vtip
  13.       */
  14.    $.fn.Vtip = function(options){
  15.        /**
  16.          * Ustawienia domyślne
  17.          */
  18.        var defaults = {
  19.            moving: true,
  20.            tipclass: 'jquery_tooltip_show_2',
  21.            usetipclass: false,
  22.            container: '.container',
  23.            tipL: 10,
  24.            tipT: 20,
  25.            css: {
  26.                'display': 'block',
  27.                'position': 'absolute',
  28.                'width': '250px',
  29.                'border': '1px solid #09547B',
  30.                'background-color': '#B6DBED',
  31.                'color': '#000',
  32.                'text-align': 'left',
  33.                'padding': '5px',
  34.                'font-weight': 'normal'
  35.            }
  36.        };
  37.        
  38.        // rozszerzenie domyslnych ustawien
  39.        defaults = $.extend(true, {}, defaults, options);
  40.        // iteracja po wszystkich pasujących elementach
  41.        return this.each(function(e) {
  42.            var $this = $(this);
  43.            $this.livequery(function(){
  44.                var span = $('<span />').attr('class',defaults.tipclass);
  45.                if (defaults.usetipclass==false){span.css(defaults.css);}
  46.                $this.after(span.html($this.attr('title')).hide()).attr('title', '');
  47.            }).live('mouseover',ShowTooltip($this,e))
  48.              .live('mouseout', HideTooltip($this))
  49.              .live('mousemove',MoveTooltip($this,e));
  50.        });
  51.    
  52.        /**
  53.          * Pokazanie tooltipa
  54.          */
  55.         function ShowTooltip($this,e){
  56.            var text = $this.next(defaults.tipclass);
  57.            dim = DimentionsTooltip(e);
  58.            text.css({top:dim['t'],left:dim['l'],opacity: 0.9}).fadeIn();
  59.        }
  60.        /**
  61.          * Ukrycie tooltipa
  62.          */
  63.         function HideTooltip($this){
  64.            var text = $this.next(defaults.tipclass);
  65.            text.fadeOut('fast');
  66.        }
  67.        /**
  68.          * Przesuwanie tooltipa wraz z ruchem myszki
  69.          */
  70.         function MoveTooltip($this,e){
  71.            dim = DimentionsTooltip(e);
  72.            $this.next(defaults.tipclass).css({top:dim['t'],left:dim['l']});
  73.        }
  74.        /**
  75.          * Wyliczenie nowej pozycji tooltipa
  76.          */
  77.         function DimentionsTooltip(e){
  78.            var wW = $(window).width();
  79.            var topT = Math.ceil(e.pageY+defaults.tipT);
  80.            var leftT = Math.ceil(e.pageX-$(defaults.container).offset().left+defaults.tipL);
  81.            if (leftT+250>wW) leftT = (wW-250);
  82.            dim = new Array();
  83.            dim['l'] = leftT+ 'px'; dim['t'] = topT+ 'px';
  84.            return dim;
  85.        }
  86.    };
  87. })(jQuery);
  88.  
  89. $(document).ready(function(){
  90.    $('.jquery_tooltip_2').Vtip();
  91. });
  92. </script>
  93. <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>
  94. <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>
  95. ?>


Już sam nie wiem jaki powinien być wzrór pluginu, spotkałem się z wieloma różnymi, np:
  1. <?php
  2. <script type="text/javascript">
  3. ;(function($){
  4.    $.fn.Vtip = function(options){
  5.        var defaults = {};
  6.        defaults = $.extend(true, {}, defaults, options);
  7.        return this.each(function(e) {
  8.            var $this = $(this);
  9.            // kod
  10.        });
  11.        // metody prywatne
  12.        function ShowTooltip(){}
  13.        function HideTooltip(){}
  14.    };
  15.    // metody publiczne
  16.    $.fn.Vtip.prywatna = function() {};
  17. })(jQuery);
  18. /** Albo tak: */
  19. (function($){
  20.    $.fn.extend({
  21.        Vtip: function() {
  22.            return $();
  23.            // gdzie umieścić metody? tutaj
  24.            prywatna: function(){}
  25.        }
  26.    });
  27. })(jQuery);
  28. /** Inny sposób */
  29. (function($) {
  30.    $.fn.Vtip = function(o) {
  31.        return this.each(function() {});
  32.    };
  33.    $.extend(Vtip.prototype, {
  34.        functionA : function() {},
  35.        functionB : function() {}
  36.    }
  37. })(jQuery);
  38. /** Jeszcze dwa */
  39. (function($) {
  40.    $.fn.Vtip = function(o) {
  41.    return this.each(function() {
  42.        // metoda prywatna
  43.        var functionA = function () {}
  44.    });
  45.  };
  46. })(jQuery);
  47.  
  48. (function($) {
  49.    $.fn.Vtip = function(o) {
  50.    return this.each(function() {});
  51.  };
  52.  $.fn.extend ({
  53.    functionA : function () {}
  54.  });
  55. })(jQuery);
  56. </script>
  57. ?>


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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.09.2025 - 02:53