You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

146 lines
3.2 KiB

/**
* mui.init
* @param {type} $
* @returns {undefined}
*/
(function($) {
$.global = $.options = {
gestureConfig: {
tap: true,
doubletap: false,
longtap: false,
hold: false,
flick: true,
swipe: true,
drag: true,
pinch: false
}
};
/**
*
* @param {type} options
* @returns {undefined}
*/
$.initGlobal = function(options) {
$.options = $.extend(true, $.global, options);
return this;
};
var inits = {};
/**
* 单页配置 初始化
* @param {object} options
*/
$.init = function(options) {
$.options = $.extend(true, $.global, options || {});
$.ready(function() {
$.doAction('inits', function(index, init) {
var isInit = !!(!inits[init.name] || init.repeat);
if (isInit) {
init.handle.call($);
inits[init.name] = true;
}
});
});
return this;
};
/**
* 增加初始化执行流程
* @param {function} init
*/
$.addInit = function(init) {
return $.addAction('inits', init);
};
/**
* 处理html5版本subpages
*/
$.addInit({
name: 'iframe',
index: 100,
handle: function() {
var options = $.options;
var subpages = options.subpages || [];
if (!$.os.plus && subpages.length) {
//暂时只处理单个subpage。后续可以考虑支持多个subpage
createIframe(subpages[0]);
}
}
});
var createIframe = function(options) {
var wrapper = document.createElement('div');
wrapper.className = $.className('iframe-wrapper');
var styles = options.styles || {};
if (typeof styles.top !== 'string') {
styles.top = '0px';
}
if (typeof styles.bottom !== 'string') {
styles.bottom = '0px';
}
wrapper.style.top = styles.top;
wrapper.style.bottom = styles.bottom;
var iframe = document.createElement('iframe');
iframe.src = options.url;
iframe.id = options.id || options.url;
iframe.name = iframe.id;
wrapper.appendChild(iframe);
document.body.appendChild(wrapper);
//目前仅处理微信
$.os.wechat && handleScroll(wrapper, iframe);
};
function handleScroll(wrapper, iframe) {
var key = 'MUI_SCROLL_POSITION_' + document.location.href + '_' + iframe.src;
var scrollTop = (parseFloat(localStorage.getItem(key)) || 0);
if (scrollTop) {
(function(y) {
iframe.onload = function() {
window.scrollTo(0, y);
};
})(scrollTop);
}
setInterval(function() {
var _scrollTop = window.scrollY;
if (scrollTop !== _scrollTop) {
localStorage.setItem(key, _scrollTop + '');
scrollTop = _scrollTop;
}
}, 100);
};
$(function() {
var classList = document.body.classList;
var os = [];
if ($.os.ios) {
os.push({
os: 'ios',
version: $.os.version
});
classList.add($.className('ios'));
} else if ($.os.android) {
os.push({
os: 'android',
version: $.os.version
});
classList.add($.className('android'));
}
if ($.os.wechat) {
os.push({
os: 'wechat',
version: $.os.wechat.version
});
classList.add($.className('wechat'));
}
if (os.length) {
$.each(os, function(index, osObj) {
var version = '';
var classArray = [];
if (osObj.version) {
$.each(osObj.version.split('.'), function(i, v) {
version = version + (version ? '-' : '') + v;
classList.add($.className(osObj.os + '-' + version));
});
}
});
}
});
})(mui);