タグ別アーカイブ: delay

一定時間で画像を切り替える

先日定期的に画像を切り替えたいとの依頼を頂きました。
画像を切り替えた際には画像をズームするというおまけ付きです。
とりあえず忘備録を兼ねて記載しておきます。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

        <script type="text/javascript"><!--

            $(function(){

                var objArea;
                    objArea = $('ul#image_area li');

                // Data Set
                minCnt    = 1;
                maxCnt    = objArea.length;
                setTimer  = 1500;  // ms
                minSizeX  = 80;
                minSizeY  = 220;
                sizeRate  = 1.5;
                maxSizeX  = (minSizeX * sizeRate);
                maxSizeY  = (minSizeY * sizeRate);

                objArea.hide();
                function moveImage( cnt ) {

                    // Init
                    objTarget = $('ul#image_area li:nth-child(' + cnt + ')');
                    objArea.fadeOut( setTimer );

                    // Image Move
                    objTarget.find('img')
                             .css({ 'width':  minSizeY + 'px', 'height': minSizeX + 'px' })
                             .animate({ 'width': maxSizeY + 'px', 'height': maxSizeX + 'px' }, setTimer);
                    objTarget.fadeIn( setTimer )

                    // Next Image
                    if ( cnt >= maxCnt ) {
                        cnt = minCnt;
                    } else {
                        cnt = cnt + 1;
                    }
                    $(window).delay( setTimer ).queue( function () {
                        moveImage( cnt );
                        $(this).dequeue();
                    });

                }

                // Move Start
                moveImage( minCnt );

            });

        --></script>

        <link rel="stylesheet" href="reset.css" type="text/css">
        <style type="text/css"><!--

            div {
                margin     : 10px;
            }

            #image_area li {
                position   : absolute;
            }

        --></style>

    </head>
    <body>
        <div id="main_area">

            <ul id="image_area">
                <li><img src="./icon_jpeg01.jpg"></li>
                <li><img src="./icon_jpeg02.jpg"></li>
                <li><img src="./icon_jpeg03.jpg"></li>
                <li><img src="./icon_jpeg04.jpg"></li>
                <li><img src="./icon_jpeg05.jpg"></li>
                <li><img src="./icon_jpeg06.jpg"></li>
                <li><img src="./icon_jpeg07.jpg"></li>
                <li><img src="./icon_jpeg08.jpg"></li>
                <li><img src="./icon_jpeg09.jpg"></li>
                <li><img src="./icon_jpeg10.jpg"></li>
            </ul>

        </div>
    </body>
</html>

sample

sample を開くと一定期間ごとに画像が切り替わります。
切り替わった際には画像が少し拡大していく感じです。

とりあえず簡易的に目を引く様な項目は出来たのではないかと思います。
実際には css で画像の中心を固定するとかの対応は必要ですが、
バナー程度のサイズならこのまま使用しても良いんじゃないでしょうか。

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

画像エリアの削除

今回の内容はちょっとした説明用です。
内容は依然に行っていた内容の簡易版ですがご了承ください。

先日社内にて、今度納品するにサイトで「 mac × safari 」の時に画面内の
link や button が動作しないとのご相談を頂きました。
担当さんから頂いたご説明では以下の内容でした。
 「おそらくスプラッシュ用の SVG が邪魔している。」

担当さんの仰る通り、SVG が透過された状態で link や button を
覆ってしまっていることが問題でした。

今まで、fadeIn や fadeOut の処理に関しては jQuery を使用していた為、
Object を消してしまうところまで行いましたが・・・
SVG や CSS の制御で animation が可能になったために起きる問題ですねぇ。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <!-- <script src="//code.jquery.com/jquery-2.1.4.min.js"></script> -->
        <script src="./jquery-2.1.4.min.js"></script>

        <script type="text/javascript"><!--

            $(window).load( function() {
                $(this).delay(1000).queue( function(){
                    $('#splash').remove();
                });
            });

        --></script>

        <link rel="stylesheet" href="reset.css" type="text/css">
        <style type="text/css"><!--

            div {
                margin : 10px;
            }

        --></style>

    </head>
    <body>
        <div id="main_area">

            <div id="target_area">
                <img id="splash" src="./image_jpeg.jpg">
            </div>

        </div>
    </body>
</html>

sample

sample を見て頂きしばらくすると画像が remove します。
今回の相談内容の様な場合には SVG や CSS の動作にて非表示になっていれば
hide でも十分になるかと思います。

注意事項として
 $(document).ready(function() {
  Or
 $(function() {

ではなく以下のものを使用してすべての内容を読み込んだ後に行うことです。
$(window).load

また、delay は queue(animation の順番)が指定されたもにしか動作しない。
そのため「queue( function(){」の形式で作業する必要があります。

そんなところですね。

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

テキストを1文字ずつフェードイン

文字列の fadeIn はよく見かけます。
「こんなことが出来る」と聞かれましたのでやってみました。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
        <script type="text/javascript"><!--

            $(function(){
                $('#exec').click( function(){
                    $('#text_area').empty();
                    var arrText = $('#input_text').val().split('');
                    $.each(arrText, function(index, val){
                        $('#text_area').append('<span id="cnt' + index + '" style="opacity:0;">' + val + '</span>');
                        $('#cnt' + index).delay(index * 300).animate({opacity:1},1000);
                    });

                });
            });

        --></script>

        <link rel="stylesheet" href="reset.css" type="text/css">
        <style type="text/css"><!--

            div {
                margin : 50px;
            }

            #text_area {
                height : 50px;
                margin : 50px;
                border : solid 1px #000000;
            }

        --></style>

    </head>
    <body>
        <div id="main_area">

            <div id="main_area">
                <p id="text_area"></p>
            </div>

            <div id="button_area">
                <input id="input_text" type="text" value="Sample Message">
                <button id="exec">click!</button>
            </div>

        </div>
    </body>
</html>

sample

sample には textbox が存在しています。
入力したうえで button を click すると入力した文字列が 一文字ずつ fadeIn します。
別に fadeIn を使っても良いんですが最終形はもう少し凝ったこともするらしいので
あえて animate を使用しています。

どうでしょう、意外といけているかと思うのですが・・・
一度これで確認してもらおうかと思います。
最終的にはもう少し装飾などを追加しますが、まずはこれで確認してもらおうと思います。

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

時間差で表示する文字列(2)

以前に時間差で表示する文字列を記述しました。
なぜなのかは不明ですが、最近意外と閲覧数が伸びています。
せっかくなので jQuery で書き直してみようと思います。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <script src="./jquery-1.9.1.min_.js"></script>   
        <script type="text/javascript"><!--

            $(function(){

                $('#disp_area div').hide();
                $('#obj01').delay(1000).fadeIn().delay(1500).fadeOut();
                $('#obj02').delay(2000).fadeIn().delay(1500).fadeOut();
                $('#obj03').delay(3000).fadeIn().delay(1500).fadeOut();
                $('#obj04').delay(4000).fadeIn().delay(1500).fadeOut();

            });

        --></script>

        <link rel="stylesheet" href="reset.css" type="text/css">
        <style type="text/css"><!--

            div {
                margin      : 50px;
            }

        --></style>

    </head>
    <body>

        <div id="disp_area">

            <div id="obj01">
                <p>Massage Line 01</p>
            </div>
            <div id="obj02">
                <p>Massage Line 02</p>
            </div>
            <div id="obj03">
                <p>Massage Line 03</p>
            </div>
            <div id="obj04">
                <p>Massage Line 04</p>
            </div>

        </div>

    </body>
</html>

sample

spmple では時間がを置いて四行の文字列が表示されるます。
内容的には前回と同じです。
それは余りにも手抜きなので、数秒後に文字列の非表示も行っています。

意外と閲覧数が多いのが分かったために書き直しを行いましたが、
ちょっと気分がすっきりしました。
今後も jQuery 以外のものに関しては書き直さないといけないなぁ・・・

jQuery はここからダウンロードしてください。

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

一定時間後に処理を行う

今回は一定時間放置した場合の処理です。
今までも一定時間度に処理を行う「setTimeout」や一定時間毎に同じ処理を実行する「setInterval」は使ったことがあります。
今回は jQuery の中にそういったものが無いのかなぁと調べた結果「delay」がありました。
今回は「delay」の使い方をやってみます。

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <script src="./jquery-1.9.1.min_.js"></script>   
        <script type="text/javascript"><!--

            $(function() {

                $('button').click( function() {

                    $(this).fadeOut().delay(4000).fadeIn();

                    $('#delay_n').fadeIn().fadeOut();
                    $('#delay_1').fadeIn().delay(1000).fadeOut();
                    $('#delay_2').fadeIn().delay(2000).fadeOut();
                    $('#delay_3').fadeIn().delay(3000).fadeOut();

                });
                $('.box').hide();

            });

        --></script>

        <link rel="stylesheet" href="reset.css" type="text/css">
        <style type="text/css"><!--

            div.box {
                margin          : 10px;
                padding         : 10px;
                
                width           : 50px;
                height          : 50px;
                border          : 1px solid #000000;
            }

            #form_area {
                width           : 420px;
                border          : 1px solid #000000;
            }

        --></style>

    </head>

        <div id="button_area">
            <button>Click Me!!!</button>
        </div>

        <div id="disp_area">
            <div id="delay_3" class="box">3 second Delay</div>
            <div id="delay_2" class="box">2 second Delay</div>
            <div id="delay_1" class="box">1 second Delay</div>
            <div id="delay_n" class="box">No Delay</div>
        </div>

    </body>
</html>

sample

spmple には button が存在しています。 
今回は button を click することで4つの div を表示してから所定の秒数後に div を消しています。
上から順に「3秒後」「2秒後」「1秒後」「指定なし」です。

別段難しい処理でもなくそのまま処理に待ち時間を設定できるのはありがたいですね。
実際の処理内容は内部処理にて「setTimeout」を使用しているようです。
使用する際の注意事項も「setTimeout」と同じであれば、今後は「delay」を使用していくようにしたいですね。

jQuery はここからダウンロードしてください。

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。