猿问

sea.js写的脚本要怎么转化成普通用的JS脚本啊?

脚本链接:https://github.com/zawaliang/iKeyboardScroll4,求求各位大侠啦,这困扰我好久了。不爱去下载的同学,我把脚本复制如下:

/**

 * iKeyboardScroll4 v0.0.1

 * 2013, zawa, www.zawaliang.com

 * Licensed under the MIT license

 * 

 * iOS7下由于受iScroll影响,造成输入框focus聚焦失败; iOS5.x 6.x没这个问题; 具体原因待研究

 */


define(function(require, exports, module) {

    var _initWinWidth = $(window).width(), // 窗口初始宽度

        _initWinHeight = $(window).height(), // 窗口初始高度

        _landscape = !!(window.orientation & 2), // http://www.codecouch.com/2011/11/detecting-orientation-changes-in-mobile-safari-on-ios-and-other-supported-browsers/

        _landscape2 = _landscape,

        _activeElement = null,

        _display = false,

        _ios7 = $.os.ios && parseFloat($.os.version) >= 7,

        _callback = [],

        _timer = null;



    function watch(selector) {

        $(selector).each(function(k, v) {

            // 事件代理的方式可能被阻止冒泡,这里使用直接绑定

            if ($(v).attr('data-keyboard-init') != 1) {

                if (_ios7) {

                    $(v).tap(function(e) {

                        this.focus();

                    });    

                }


                $(v).on('focus', function(e) {

                    _activeElement = this;


                    // iOS7不触发focus,这里手动触发; 这里的focus不可去掉,否则fixIScroll4Onchange里的focus可能存在不生效的情况

                    _ios7 && this.focus();

                }).on('blur', function(e) {

                    _activeElement = null;

                }).attr('data-keyboard-init', 1);

            }

        });

    }


    function pushCallback(callback) {

        if ($.type(callback) == 'function') {

            _callback.push(callback);

        }

    }


    function detect() {

        // 不等表示翻屏

        if (_landscape != _landscape2) {

            // 屏幕翻转且翻转前键盘处于显示状态时,交换宽高

            if (_display) {

                var tmpWidth = _initWinWidth;

                _initWinWidth = _initWinHeight;

                _initWinHeight = tmpWidth;

            } else {

                _initWinWidth = $(window).width();

                _initWinHeight = $(window).height();

            }

        }


        var h = $(window).height();

        _display = _activeElement !== null && _initWinHeight > h;


        $.each(_callback, function(k, v) {

            v.apply(null, [_display, _activeElement]);

        });

        _landscape = _landscape2;

    }



    // 监控聚焦元素

    watch('input,textarea,select');


    // 绑定

    $(window).on('orientationchange', function(e) {

        _landscape2 = !!(window.orientation & 2);


        // ios下可以直接取宽高,且ios下onresize似乎比orientationchange先触发,因此setTimeout的时机不好掌控

        _ios7 && detect();

    }).on('resize', function(e) {

        // ios下onresize似乎比orientationchange先触发,因此setTimeout的时机不好掌控

        // 对于ios,翻屏时统一通过orientationchange进行处理,非翻屏时统一使用onresize

        // ios下,onresize后若宽度不相同证明翻屏了,此时使用orientationchange来进行处理

        // Android不变,使用onresize处理

        if (_ios7 

            && (_landscape != _landscape2 // 此判断是为了防止orientationchange先于onresize触发

                || $(window).width() != _initWinWidth)) {

            return;

        }


        _timer && clearTimeout(_timer);

        // Android下orientationchange之后获取window值会延时

        _timer = setTimeout(detect, 200);

    });

    


    return {

        /**

         * 为元素添加监控,适用于新增的元素

         * @param {String|Object} selector

         */

        watch: watch,

        /**

         * 绑定键盘显隐回调, 会在窗口尺寸变化时触发

         * @param {Function} callback(display, focusElement) display为true时表单键盘显示; focusElement聚焦元素

         */

        onchange: pushCallback,


        /**

         * 键盘变化时同步刷新iScroll4,并且定位到聚焦元素处

         * @param {Object} iScrollInstance iScroll实例

         * @param {Int} [offset :5px] 聚焦元素偏移值

         */

        fixIScroll4Onchange: function(iScrollInstance, offset) {

            pushCallback(function(display, focusElement) {

                // 当iScroll使用resize时,键盘出现会自动刷新高度,这里只对使用onorientationchange的情况做处理

                if ('onorientationchange' in window) {

                    iScrollInstance.refresh();

                }


                // 聚焦且键盘显示时,修正输入框位置

                // iOS6会自动定位到输入框,但还是需要refresh位置

                // iOS7不会自动定位到输入框,表现跟Android类似

                if ((!$.os.ios || _ios7) 

                    && display && focusElement) {

                    offset = $.type(offset) == 'number' ? offset : 5;


                    var el = $(focusElement),

                        winHeight = $(window).height(),

                        top = el.height() + el.offset().top + offset;


                    // iScrollInstance.y为负值

                    if (top - iScrollInstance.y > winHeight) {

                        iScrollInstance.scrollTo(0, winHeight - top + iScrollInstance.y, 0);

                    }


                    // iOS7下聚焦键盘出现后,输入框没聚焦,这里设置下

                    _ios7 && focusElement.focus();

                }

            });

        }

    };

});


com990ok
浏览 1886回答 1
1回答

x兔子

define(function(require, exports, module) { } 去掉
随时随地看视频慕课网APP
我要回答