たぼさんの部屋

いちょぼとのんびり

js圧縮 iframe.js

//------------------------------------------------------------
/*
 *  iframe.js
 * ver 2.1.14
 * FlickEventHandlerを修正
 * touchmove時にある程度のx移動でメニュー開閉するように。
 * ver 2.1.1
 * last update 4/22
 * 画面の向きを変更したときのコンテンツの高さ調節機能を実装  4/22
 */
//------------------------------------------------------------
( function() {"use strict";
        var webMessaging = ( function() {
                var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
                return {
                    send : function(message) {
                        //jsonオブジェクトで記述しました。
                        var jsonMessage = JSON.stringify(message);
                        //json形式に変換
                        target.postMessage(jsonMessage, "*");
                    }
                };
            }());

        /**
         * @constructor
         */
        var FlickEventHandler = function(sourceContainer) {
            this.container = sourceContainer;

            this.initialize();
        };
        FlickEventHandler.prototype = {
            initialize : function() {
                this.container.addEventListener('touchstart', this, false);
                this.container.addEventListener('touchmove', this, false);

            },
            handleEvent : function(event) {
                var message = {};
                switch(event.type) {
                    case "touchstart":
                        this.movedFlg = false;
                        this.start = {
                            pageX : event.touches[0].pageX,
                            pageY : event.touches[0].pageY,
                            time : Number(new Date())
                        };
                        //onTouchMoveで利用するための初期化設定です。
                        this.isScrolling = undefined;
                        break;
                    case "touchmove":
                        //movedFlgがtrueならなにもしない
                        if (this.movedFlg) {
                            return;
                        }
                        // タッチが1本のときだけ実行します。
                        if (event.touches.length > 1 || event.scale && event.scale !== 1) {
                            return;
                        }
                        this.deltaX = event.changedTouches[0].pageX - this.start.pageX;
                        this.deltaY = event.changedTouches[0].pageY - this.start.pageY;
                        this.deltaTime = Number(new Date()) - this.start.time;
                        //スクロールかどうかの判定です。スクロールイベントは連続して発生するため、onTouchStart-onTouchMove-onTouchEndの一連の動作の中で、最初に一度だけテストします。
                        if ( typeof this.isScrolling === 'undefined') {
                            this.isScrolling = !! (this.isScrolling || Math.abs(this.deltaX) < Math.abs(this.deltaY) );
                        }
                        if (this.isScrolling) {
                            return;
                        }
                        if (Math.abs(this.deltaX) > 50) {

                            if (this.deltaX < 0) {
                                //閉じる
                                message = {
                                    "flick" : "close"
                                };
                            }
                            if (this.deltaX > 0) {
                                //開く
                                message = {
                                    "flick" : "open"
                                };
                            }
                            //postMessageを送信
                            webMessaging.send(message);
                            this.movedFlg = true;
                        }
                        break;
                }
            }
        };

        /**
         * AutoFontSpan
         */
        var AutoFontSpan = function(target, size) {
            //sizeは1が普通サイズ
            this.target = target;
            this.size = size;

            this.setSize();
        };

        AutoFontSpan.prototype = {
            BASE_RATIO : 1 / 360,

            setSize : function() {
                try {
                    this.target.style.fontSize = Math.round(this.getDocWidth() * this.BASE_RATIO * this.size * 100) + '%';
                } catch(e) {
                    alert(e);
                }
            },
            getDocWidth : function() {
                return document.documentElement.clientWidth;
            }
        };
        var getHeight = function() {

            return document.body.scrollHeight;
        };
        function init() {
            //フォント調節をセットします.
            var autoFontSpans = [];

            var elms = document.getElementsByTagName('span');
            for (var i = 0; i < elms.length; i++) {
                if (elms[i].getAttribute('size')) {
                    var autoFontSpan = new AutoFontSpan(elms[i], elms[i].getAttribute('size'));
                    autoFontSpans.push(autoFontSpan);
                }
            }

            //Flick event set
            new FlickEventHandler(document.body);

            /*
            * postMessage
            */
            // iframe.bodyの高scrollHeightさをpostMessageで送信します。
            var message = {
                "iframeload" : {
                    "height" : getHeight()
                }
            };
            webMessaging.send(message);

            //
            //  EventHandler set
            //

            //resize
            window.addEventListener("resize", function() {
                //autoFontSpan変更
                for (var i = 0; i < autoFontSpans.length; i++) {
                    autoFontSpans[i].setSize();
                }

                var message = {
                    "resize" : {
                        "height" : getHeight()
                    }
                };
                webMessaging.send(message);
            }, false);

        }

        //init call
        window.addEventListener('load', init, false);

        //parentからの受信用
        window.addEventListener('message', function(event) {
            //未使用
        }, false);

    }());

YUI

(function(){var b=(function(){var f=parent.postMessage?parent:(parent.document.postMessage?parent.document:undefined);return{send:function(h){var g=JSON.stringify(h);f.postMessage(g,"*")}}}());var e=function(f){this.container=f;this.initialize()};e.prototype={initialize:function(){this.container.addEventListener("touchstart",this,false);this.container.addEventListener("touchmove",this,false)},handleEvent:function(g){var f={};switch(g.type){case"touchstart":this.movedFlg=false;this.start={pageX:g.touches[0].pageX,pageY:g.touches[0].pageY,time:Number(new Date())};this.isScrolling=undefined;break;case"touchmove":if(this.movedFlg){return}if(g.touches.length>1||g.scale&&g.scale!==1){return}this.deltaX=g.changedTouches[0].pageX-this.start.pageX;this.deltaY=g.changedTouches[0].pageY-this.start.pageY;this.deltaTime=Number(new Date())-this.start.time;if(typeof this.isScrolling==="undefined"){this.isScrolling=!!(this.isScrolling||Math.abs(this.deltaX)<Math.abs(this.deltaY))}if(this.isScrolling){return}if(Math.abs(this.deltaX)>50){if(this.deltaX<0){f={flick:"close"}}if(this.deltaX>0){f={flick:"open"}}b.send(f);this.movedFlg=true}break}}};var a=function(g,f){this.target=g;this.size=f;this.setSize()};a.prototype={BASE_RATIO:1/360,setSize:function(){try{this.target.style.fontSize=Math.round(this.getDocWidth()*this.BASE_RATIO*this.size*100)+"%"}catch(f){alert(f)}},getDocWidth:function(){return document.documentElement.clientWidth}};var d=function(){return document.body.scrollHeight};function c(){var f=[];var j=document.getElementsByTagName("span");for(var h=0;h<j.length;h++){if(j[h].getAttribute("size")){var g=new a(j[h],j[h].getAttribute("size"));f.push(g)}}new e(document.body);var k={iframeload:{height:d()}};b.send(k);window.addEventListener("resize",function(){for(var l=0;l<f.length;l++){f[l].setSize()}var m={resize:{height:d()}};b.send(m)},false)}window.addEventListener("load",c,false);window.addEventListener("message",function(f){},false)}());