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
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); |