~ モバイル版(スマートフォン)の操作 ~
左右にスワイプすると、前後の投稿へ移動します。
← 前の投稿 | 次の投稿 →
日々のコンピュータ情報の集積と整理

Dr.ウーパのコンピュータ備忘録

2015年2月24日火曜日

ソースコード解説:文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータ


スポンサーリンク

イントロダクション

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータ」の JavaScript コードについて解説します。


ソースコードの全文は、以下のページに記載してあります。

ソースコード:文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータ
http://upa-pc.blogspot.com/2015/02/anime-css-code.html

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータのソースコード解説

データ入力部

<!-- program start -->

<br />
<form onsubmit="return false;">
<b>スタイルを適用するテキスト:</b><input id="input-text" style="width: 500px;" type="text" /><br />
例)こんにちは!<br />
<br />
<b>テキストのスタイルシート(CSS):</b><br />
<textarea cols="90" id="input-css" rows="20"></textarea><br />
アニメーションの1フレームに使用したいスタイルを一行ずつ記載してください。<br />
例)<br />
text-shadow: 4px 4px 4px rgba(150, 150, 150, 1);<br />
text-shadow: 8px 8px 8px rgba(150, 150, 150, 1);<br />
text-shadow: 12px 12px 12px rgba(150, 150, 150, 1);<br />
<br /></form>
<br />

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードを生成するために必要なデータをユーザから受け付ける部分です。

「スタイルを適用するテキスト」と「テキストのスタイルシート(CSS)」を受け付けます。


データ出力部

<b>プレビュー:</b><br />
<div id="preview">
ここにデータが出力されます。
</div>
<br />
<b>貼り付けコード:</b><br />
<textarea cols="90" id="output-html" rows="20">ここに貼り付け用のコードが出力されます。
</textarea>
<br />
このコードをWebページのソースコードに貼り付けてください。<br />

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードを生成した結果を出力します。

プレビューと、貼り付け用コードを出力します。


貼り付けコード原型・プレビュー用コード

<script id="anime-css-main" type="text/javascript">
<!--
(function(){function e(){a.setAttribute("style",c[b]);f&&(d.innerHTML="",d.appendChild(document.createTextNode("style:"+c[b])));b++;b>=c.length&&(b=0);setTimeout(e,1E3)}var a=document.getElementById("anime-css-container");if(a){a.removeAttribute("id");var c="CSS-DATA".split(/\r\n|\r|\n/g);if(!(0>=c.length)){var f=!0,d=null;f&&(d=document.createElement("div"),a.parentNode.insertBefore(d,a));var b=0;e()}}})();
//-->
</script>

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードの貼り付け用コードと、プレビューで使用するコードです。

ユーザから入力されたスタイルシート情報を、コード中の "CSS-DATA" の部分に置換します。


なお、このコードは、貼り付けコードのデータ量圧縮のため最適化されています。
最適化されていないコードと、その解説については、以下のページに記載しました。

生成コード解説:文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータ
http://upa-pc.blogspot.com/2015/02/anime-css-generated-code.html


文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータ:メイン処理部

<script type="text/javascript">
<!--
    (function () {

        var id_input_text = "input-text";
        var id_input_css = "input-css";
        var id_output_preview = "preview";
        var id_output_html = "output-html";


        // 前回検査時の入力値
        var input_old_text = "";
        var input_old_css = "";


        // 定期的に入力を監視し、入力が変化していたら、出力する
        setInterval((function () {

            var input_text = document.getElementById(id_input_text).value;
            var input_css = document.getElementById(id_input_css).value;

            if (input_text != input_old_text ||
                input_css != input_old_css) {


                // 出力データ形成
                var obj_output = document.createElement("div");

                obj_output.setAttribute("id", "anime-css-container");
                obj_output.appendChild(document.createTextNode(input_text));


                var multiline_css = input_css.replace(/\r\n|\r|\n/g, "\\r\\n");

                var default_anime_css_script = document.getElementById("anime-css-main").innerHTML;
                var anime_css_script = default_anime_css_script.replace("CSS-DATA", multiline_css);

                var obj_script = document.createElement("script");
                obj_script.setAttribute("type", "text/javascript");
                obj_script.innerHTML = anime_css_script;
                obj_output.appendChild(obj_script);


                // 画面へ出力
                var obj_output_container = document.createElement("div");
                obj_output_container.appendChild(obj_output);

                document.getElementById(id_output_html).value = "<!-- anime css begin -->\r\n" +
                    obj_output_container.innerHTML + "\r\n" +
                    "<!-- anime css end -->";


                var obj_output_preview = document.getElementById(id_output_preview);
                obj_output_preview.innerHTML = "";
                obj_output_preview.appendChild(obj_output);


                input_old_text = input_text;
                input_old_css = input_css;
            }

        }), 500);

    })();

//-->
</script>
<!-- program end -->

文字へのスタイルシートの適用結果を、アニメーションで表示するJavaScriptコードジェネレータの主な処理を記載している場所です。

入力を一定周期で監視し、入力が変化していたらコードの生成処理を行っています。


コードの流れは次のとおりです。
ユーザ入力取得
貼り付けコード生成
プレビュー出力
貼り付けコード出力


貼り付けコード生成部では、ページ内に張り付けられている JavaScript コードをコピーして、ユーザから入力されたスタイルシートを置換によって埋め込んでいます。

そのため、貼り付けコード・プレビュー用コードは、ジェネレータのページが読み込まれたときに無条件で動作しますが、そのときには、"anime-css-container" という id 属性が存在しないため、コードは何の処理も行わず即時終了します。


このコードの解説は以上です。



スポンサーリンク

コメントを投稿

コメント投稿機能について