Tag/jQuery

jQuery野良プラグイン

jQuery野良プラグイン なんてのを Google Code で作ったよ。

なんか作ったら、どんどこ追加していく予定。 大きいのはメインストリートで開発が進んでると思うので、 ココでは小粒なのを作っていけたら良いと思う。

とりあえず、WindowsのノートPCが手に入ったら、 SWFObjectSWFMacMouseWheeljQuery バージョンは作りたいと思っとります! が、それもいつになるんだか :-P

abde な人や t- 氏に煽られると、 色々と良いものが出来てくるかも知れないね :-)

Posted at: 
2008/04/10 00:36:38
0 Comments
1 TrackBack
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2008/04/10/jquery-nora-plugins/trackback/

jQueryでaタグをサムネイルにするプラグイン書いたよ。

abdeluxe な方にお願いされて、またまた調子に乗りました。 今回はaタグをサムネイルにする jQuery の野良プラグイン書いたよ :-)

こんな感じにするとaタグがサムネイル画像になる。(実際はもうちょっとメンドクサイ)

//  コレがデフォルト
$('a').asThumbnail();

サイズもちゃんと指定出来るよ。当たり前だけども。

//  引数でオプションを指定
$('a').asThumbnail({
    width: 100,
    height: 100
});

で、どうやって画像のパスを指定するかと言うと、 ぶっちゃけaタグの href 属性を正規表現で抜いてきて、 それを CSS で背景に指定してあげるだけ。 使い勝手が良いんだか悪いんだか分からんですが、 とりあえずソースを晒しておきます。

/**
 *  show element(s) as thumbnail
 *
 *  @author     Takanobu Izukawa
 *  @version    0.0.1
 */
jQuery.fn.extend({
    /**
     *  asThumbnail
     *
     *  @param options  Object that contains some parameter.
     *      width:          specified element width.
     *                      default value is 170px.
     *      height:         specified element height.
     *                      default value is 170px.
     *      pattern:        specified retrievable regex pattern.
     *                      default value is `abdeluxe` custom.
     *      replacement:    specified replace format.
     *                      default value is `abdeluxe` custom.
     *  @return         jQuery.
     */
    asThumbnail: function (options)
    {
        // fix options.
        options = options || {};
        //  declared default options.
        var defaultOptions = {
            'width': 170,
            'height': 170,
            'pattern': /^.*\/(\d+)\.html$/,
            'replacement': '/blog/entryimg/$1.jpg'
        };
        //  merge options.
        options = jQuery.extend({}, defaultOptions, options);
        //  execute effect to each element(s).
        return this.filter('a')
        .each(function()
        {
            //  retrieve image url.
            var imageURL = this.href.replace(options.pattern,
                                             options.replacement);
            //  attach new css.
            jQuery(this).css({
                'display': 'block',
                'width': options.width + 'px',      //  should be width method instead?
                'height': options.height + 'px',    //  should be height method instead?
                'background-image': 'url(' + imageURL + ')',
                'background-repeat': 'no-repeat',
                'background-position': '50% 50%'
            }).empty();
        }).end();
    }
});

たぶん、画像の position とかは指定出来た方が良いんだろうなぁ。 まぁ、そこらへんは勢いで作ったのでご愛嬌 :-P

ツッコミ大歓迎でございます!

Posted at: 
2008/03/19 03:02:49
2 Comments
2 TrackBacks
Tags: 
design
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2008/03/19/make-anchor2thumbnail-plugin-on-jquery/trackback/

jquery.hotkeys.jsを試してみたよ。

jQuery のプラグイン jquery.hotkeys.js を試してみたよ。

ダウンロードは js-hotkeys - Google Code から。 落としてきたものを展開するんだけれども、 カレントディレクトリに散乱してしまうのでディレクトリを掘った方が良いと思う。

展開した中に入っている jquery.hotkeys.js がそれ。 一緒に入ってる jQuery は 1.1.4なものの、 1.2.1もサポートされているみたいなので気にせず1.2.1で動かす。 サンプル的な動きは Live Demo を見るのが良いと思う。

インターフェイスはこうなってるらしい。

//  イベント設定。
$.hotkeys.add(KEY, OPTIONS, CALLBACK);

//  イベント削除。
$.hotkey.remove(KEY, OPTIONS);

引数の中で、 OPTIONS はオプションで、 特に指定が無ければ省略出来るよ。 なので、一番簡単な使い方はこんな感じになる。

//  "j"のkeydown(デフォルト)にイベントリスナーを設定。
$.hotkeys.add('j', function ()
{
    alert('hit.');
});

//  "j"のkeydown(デフォルト)のイベントリスナーを削除。
$.hotkeys.remove('j');

オプションは以下のようなものがある。

キー タイプ デフォルト値 説明
type String keydown 補足するイベント
propagate Boolean false イベントの伝達を制御
disableInInput Boolean false inputやtextareaのフォーカス時の処理を制御
target element/String html callbackのthisを指定
checkParent Boolean true OperaとSafariのバグ依存回避用?

オプション指定する場合こんな感じ。

//  "Ctrl+a"のkeyupにイベントリスナーを設定。
$.hotkeys.add('Ctrl+a',
{
    target  : 'div.select',
    type    : 'keyup'
}, function()
{
    //  クラスhigeをトグル。
    $(this).toggleClass('hige');
});

//  "Ctrl+a"のイベントリスナーを削除。
$.hotkeys.remove('Ctrl+a', {target: 'div.select'});

このオプションの中でも良く使うと思うのが、 type はまぁ良しとして、 disableInInput だと思う。 これ、物凄く便利っす。 こいつを true にしておくだけで、 inputtextarea にフォーカスしてる時は処理をスルーしてくれる。 今回はフォームとは全く関係ない処理を書いてたので、 本当に助かった。

何となくですが、今回書いたものを晒してみたり。 jとkでh1〜h6を行ったり来たりするだけ。

(function ()
{
    //  hotkeysのオプションを定義。
    var options = {
        'type': 'keydown',
        'disableInInput': true
    }
    //  ポジションホルダー
    var positions = [0];
    //  それぞれのヘッダの位置を取ってくる。
    $('h1, h2, h3, h4, h5, h6').each(function ()
    {
        positions.push(this.offsetTop + 15);
    });
    //  ソート。
    positions.sort(function (a, b)
    {
        return a > b ? 1 : -1;
    });
    //  現在の位置を取得する関数を定義。
    var getOffset = function ()
    {
        if ($.browser.msie)
            return document.body.scrollTop || document.documentElement.scrollTop;
        else
            return window.pageYOffset;
    }
    //  "j"にイベントリスナーを登録。
    $.hotkeys.add('j', options, function ()
    {
        var offset = getOffset();
        for (var i = 0; i < positions.length; i++)
        {
            if (offset < positions[i])
            {
                window.scrollTo(0, positions[i]);
                break;
            }
        }
    });
    //  "k"にイベントリスナーを登録。
    $.hotkeys.add('k', options, function ()
    {
        var offset = getOffset();
        for (var i = positions.length; i >= 0; --i)
        {
            if (offset > positions[i])
            {
                window.scrollTo(0, positions[i]);
                break;
            }
        }
    });

})();//END: lambda.
Posted at: 
2008/01/07 23:34:25
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2008/01/07/tried-using-js-hotkeys/trackback/

jQuery.ajaxメモ

久々に jQuery のソースを眺めたので自分用メモ。

jQuery.post とか jQuery.get を使うと、 エラーが発生した時(404とか)に全く何も起きない。 で、そこらへんをちゃんとしたい時は jQuery.ajax を使ってね。って事みたい。

Ajaxのステータス( jQuery の)がsuccess以外だと、 jQuery.handleError を呼び出すようになっていて、 そのなかでエラーハンドラがセットされていればコールする仕組みになってる。

//  jquery.js@2342あたり。
// Make sure that the request was successful or notmodified
if ( status == "success" ) {
    //  もろもろな処理。
} else
    //  エラーハンドラをコール。
    jQuery.handleError(s, xml, status);

handleError はこんな感じ。

//  jquery.js@2424あたり。
handleError: function( s, xml, status, e ) {
    //  エラーハンドラがセットされていればコール。
    if ( s.error ) s.error( xml, status, e );

    //  globalな設定ならajaxErrorをコール。
    if ( s.global )
        jQuery.event.trigger( "ajaxError", [xml, s, e] );
},

エラーをちゃんと処理したい時とかは、 こんな感じで設定してやると良いみたい。

$('a').click(function ()
{
    var successCallback = function (response)
    {
        //  やりたい処理を書く。
    };
    var errorCallback = function (xml, status, e)
    {
        //  エラーハンドリングを書く。
        //  xml == XMLHttpRequestだよ。
    };
    //  リクエストを投げる。
    $.ajax({
        'type':     "POST",
        'url':      this.href,
        'data':     {'hoge': 'fuga', 'hige': 'moja'},
        'success':  successCallback,
        'error':    errorCallback
    });
    //  画面繊維をキャンセル。
    return false;
});

jQuery.ajax は設定がたくさんあってメンドクサそうに見えるものの、 ちゃんとデフォルトが設定されているので、 必要な部分だけ上書きしてやれば良いので簡単。 しかも、デフォルトが気に入らなければ jQuery.ajaxSetup を使って デフォルトを上書きすることも出来るので、 簡単に自分用の設定に出来るよ。

Posted at: 
2007/12/08 22:30:28
4 Comments
1 TrackBack
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/12/08/jquery-ajax-memo/trackback/

JavaScript-XPathを触ってみたよ。

個人的に XPath がトレンドってのもあって、 JavaScript-XPath を使ってみたよ。

amachang さんの こちらのエントリーjQuery のバインディングが公開された事を知って、 XPath for jQuery も使ってちょくちょく触ってみたけど、 全く意識する事無く使えて物凄くいい感じ。

ダウンロードはココからしてきたっす。

JavaScript-XPath
JavaScript-XPath - CodeRepos::Share - Trac
XPath for jQuery
JavaScript-XPath/bindings/jQuery - CodeRepos::Share - Trac

まだまだ大した XPath を書けないので、 キョーレツなテストとかは出来ないけど、 個人的には end() が併用出来るのがめちゃくちゃ嬉しい。 end() って jQuery の重要な機能の1つなので、 これが併用出来るかどうか?でかなり印象が変わってくる(と思う)。

これから常用プラグインとして使っていきそうな勢いなので、 気付いた事とかフィードバックしていけたら良いなぁ。 まずは lxmlJavaScript-XPathXPath と仲良くならなくちゃね。

Posted at: 
2007/11/20 01:53:56
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
XPath
Trackback: 
http://humming.via-kitchen.com/2007/11/20/tried-using-javascript-xpath/trackback/

stripe野良プラグインを修正

946 な方から色々指摘を受けて修正しました。

  • CSSの指定からクラス名の指定にした。
  • tableの場合の修正。
/**
 *  stripe.js
 */
jQuery.fn.extend({

    stripe : function (o)
    {
        o = o || {};
        var even = o.even || 'even';
        var odd = o.odd || 'odd';

        return this.each(function ()
        {
            switch (this.nodeName.toLowerCase())
            {
                case 'ul':
                case 'ol':
                    jQuery(this).children('li:even')
                    .addClass(even)
                    .end().children('li:odd')
                    .addclass(odd);
                    break;

                case 'table':
                    jQuery(this).children('tbody')
                    .children('tr:even')
                    .addClass(even)
                    .end().children('tr:odd')
                    .addClass(odd);
                    break;

                default:
                    break;

            }//END: switch.

        });//END: each.

    }//END: stripe.

});//END: jQuery.fn.extend.

しょせんは野良な訳ですがw

って思ってたら 946 な人の こんなエントリー が。 なんだ、プラグインじゃなくて良かったのか。

Posted at: 
2007/09/25 20:29:54
2 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2007/09/25/modified-jquery-stripe-nora-plugin/trackback/

jQueryで複数のボタンから1つのスクリプトへPOSTする

WEBプログラマー+WEBデザイナーなZARU日記 さんの コチラのエントリー より。

jQuery を使ってAjaxで複数のボタンから1つのスクリプトへPOSTする。」ってのを、 自分なりにちょっとやってみたよ。(X)HTMLの構成に左右されますが、こんな感じでいかがでしょう?

まずはHTMLはこんな感じのを用意。ちょっとやりやすく変えてます。

<div>
    <input type="text" name="textarea1" id="textarrea1" />
    <input type="hidden" name="id1" id="id1" />
    <input type="button" value="post" />
</div>
<div>
    <input type="text" name="textarea2" id="textarrea2" />
    <input type="hidden" name="id2" id="id2" />
    <input type="button" value="post" />
</div>
<div>
    <input type="text" name="textarea3" id="textarrea3" />
    <input type="hidden" name="id3" id="id3" />
    <input type="button" value="post" />
</div>

で、 jQuery ではこんな感じ。

<script type="text/javascript">
//<![CDATA[
$(function ()
{
    // divの中にあるtype="button"なinputにイベントを設定。
    $('div input:button').click(function ()
    {
        // ボタンの親要素(div)をjQueryでラップ。
        var $$ = $(this).parent('div');

        // 必要な値を持ってくる。
        var options = {
            'textdata'  : $$.children('input:text').val(),
            'id'        : $$.children('input:hidden').val()
        }

        // スクリプトへPOST。
        $.post('post.php', options, function (data)
        {
            // 後処理とかする。
        });
    });

});
//]]>
</script>

とりあえずコレで動く(ハズ)。 けど、なんか汚いし手数が多い気がする。 divで括った意味もそんなに無くなってるしなぁ。

なので、divをformに変更してみる。

<form action="post.php" method="post">
    <input type="text" name="textarea1" id="textarrea1" />
    <input type="hidden" name="id1" id="id1" />
    <input type="submit" value="post" />
</form>
<form action="post.php" method="post">
    <input type="text" name="textarea2" id="textarrea2" />
    <input type="hidden" name="id2" id="id2" />
    <input type="submit" value="post" />
</form>
<form action="post.php" method="post">
    <input type="text" name="textarea3" id="textarrea3" />
    <input type="hidden" name="id3" id="id3" />
    <input type="submit" value="post" />
</form>

これだと jQuery ではこんな感じ。

<script type="text/javascript">
//<![CDATA[
$(function ()
{
    $('form').submit(function ()
    {
        // サブミットされたformを軸にする。
        $.post(this.action,
        $('input:text, input:hidden', this).serialize(),
        function (data)
        {
            // 後処理。
        });

        // 実際のsubmit処理をキャンセル。
        return false;
    });
});
//]]>
</script>

かなりすっきりした気がする。 実際は他との衝突を避ける為に、もうちょっと手を加えなくちゃダメだろうけど。

WEBプログラマー+WEBデザイナーなZARU日記 さんの趣旨とかけ離れてしまっていたらすいません。

Posted at: 
2007/09/24 16:43:54
2 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/09/24/post-from-plural-to-one-script-on-jquery/trackback/

jQueryでstripeな野良プラグイン

気の向くままにまた jQuery の野良プラグイン。

今度はリストとかテーブルをシマ模様にしてみたよ。 $.stripeSettings に全体共通の設定を仕込んでおいて、 $(...).stripe の引数で上書きする。 どっちも省略出来るけど、どっちかやらないと何も変わらない。

内容はこんな感じ。

/**
 *  stripe.js
 */
if (jQuery.stripeSettings === window.undefined)
    jQuery.stripeSettings = {};

jQuery.stripeSettings.even  = {};
jQuery.stripeSettings.odd   = {};

jQuery.fn.extend({

    stripe : function (o)
    {
        o = o || {};
        // Override default settings.
        var even = jQuery.extend({}, jQuery.stripeSettings.even, o.even || {});
        var odd = jQuery.extend({}, jQuery.stripeSettings.odd, o.odd || {});

        return this.each(function ()
        {
            switch (this.nodeName.toLowerCase())
            {
                case 'ul':
                case 'ol':
                    jQuery(this).children('li:even')
                    .css(even)
                    .end().children('li:odd')
                    .css(odd);
                    break;

                case 'table':
                    $self = jQuery(this);
                    if ($self.children('tbody').size() > 0)
                    {
                        $self = $self.children('tbody');
                    }

                    $self.children('tr:even')
                    .css(even)
                    .end().children('tr:odd')
                    .css(odd);
                    break;

                default:
                    break;

            }//END: switch.

        });//END: each.

    }//END: stripe.

});//END: jQuery.fn.extend.

実際使うときはこんな感じ。

<script type="text/javascript" charset="utf-8">
//<![CDATA[
$(function ()
{
    // 全体の設定。
    $.stripeSettings = {
        even    : {
            'background-color'  : '#ffa0a0'
        },
        odd     : {
            'background-color'  : '#a0a0ff'
        }
    };

    // id="hige"の中のtableにstripeを付ける。
    $('#hige table').stripe();

    // 個別にオーバーライドする場合。
    var settings = {
        even    : {
            'background-color'  : '#ffa0a0'
        }
    };

    // class="stripe"なul, ol, tableにstripeを付ける。
    $('.stripe').stripe(settings);
});
//]]>
</script>

引数は色だけに固定してないので、 jQuery から渡せるCSSは一通り渡せる(ハズ)。

やっつけな部分が見え隠れしてたりするものの、まぁそのへんはご愛嬌。 946 な方、またもサンプルが用意出来てなくてすいません。

Posted at: 
2007/09/24 03:44:19
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2007/09/24/jquery-stripe-nora-plugin/trackback/

jQueryでpopupな野良プラグイン

jQuery でpopupなプラグインを作ってみたよ。

たしか既に公開されてるのがあったような気がするけど、 引数の種類とか思い出す為にも自作してみた。

jQuery.extend({//START: jQuery.extend.

    /**
     *  flattenAttrs.
     */
    flattenAttrs : function (o, s)
    {
        var retval = []
        $.each(o||{}, function (k, v)
        {
            retval.push(k+'='+v);
        });
        return retval.join(s||',');

    }//END: flattenAttrs.

});//END: jQuery.extend.

jQuery.fn.extend({//START: jQuery.fn.extend.

    /**
     *  popup.
     */
    popup : function (name, options)
    {
        var settings = {
            'titlebar'      : 'no',
            'resizable'     : 'yes',
            'scrollbars'    : 'yes',
            'left'          : screen.width,
            'top'           : screen.height,
            'width'         : screen.availWidth,
            'height'        : screen.availHeight
        }
        options = jQuery.extend({}, settings, options||{});
        name = name || 'piggy';

        return this.filter('a[href]')
        .click(function (evt)
        {
            window
            .open(this.href, name, jQuery.flattenAttrs(options))
            .focus();

            return false;
        })
        .end();

    }//END: popup.

});//END: jQuery.fn.extend.

これを読み込ませておいて、使うときはこんな感じ。

<script type="text/javascript">
//<![CDATA[
    $(function (){

        $('a.popup').popup();

    });
//]]>
</script>

見事に車輪です。

Posted at: 
2007/09/23 05:23:52
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
plugin
Trackback: 
http://humming.via-kitchen.com/2007/09/23/jquery-popup-nora-plugin/trackback/

jQuery-1.2でcontainsが動かない!?

jQuery を1.2にアップデートしてみたら、 contains が動かない。firebugで確認してみると、

$('...').contains is not a function

らしい。 Release Notes 見ても何も触れられてないんだけどなぁ。

それと serialize の挙動が変わってるね。 disabledなエレメントの値はシリアライズされなくなったみたい。ここらへんはブラウザと挙動が揃って良い感じ。

中身は結構変わってるみたいだし、ちょくちょくこういうのが出てくるんだろうね。

Posted at: 
2007/09/12 11:59:20
0 Comments
0 TrackBacks
Tags: 
JavaScript
jQuery
Trackback: 
http://humming.via-kitchen.com/2007/09/12/contains-doesnt-work-on-jquery12/trackback/

Categories

Archives