!String.prototype.trim && ( String.prototype.trim = function(){ return $.trim( this ); } );
/**
* @namespace
* @class window
* @static
*/
/**
* 按格式输出字符串
* @method printf
* @static
* @param {string} _str
* @example
* printf( 'asdfasdf{0}sdfasdf{1}', '000', 1111 );
* //return asdfasdf000sdfasdf1111
*/
function printf( _str ){
for(var i = 1, _len = arguments.length; i < _len; i++){
_str = _str.replace( new RegExp('\\{'+( i - 1 )+'\\}', 'g'), arguments[i] );
}
return _str;
}
/**
* 判断URL中是否有某个get参数
* @method has_url_param
* @static
* @param {string} _url
* @param {string} _key
* @example
* var bool = has_url_param( 'getkey' );
*/
function has_url_param( _url, _key ){
var _r = false;
if( !_key ){ _key = _url; _url = location.href; }
if( /\?/.test( _url ) ){
_url = _url.split( '?' ); _url = _url[ _url.length - 1 ];
_url = _url.split('&');
for( var i = 0, j = _url.length; i < j; i++ ){
if( _url[i].split('=')[0].toLowerCase() == _key.toLowerCase() ){ _r = true; break; };
}
}
return _r;
}
/**
* 添加URL参数
* <br /><b>require:</b> del\_url\_param
* @method add_url_params
* @static
* @param {string} _url
* @param {object} $params
* @example
var url = add_url_params( location.href, {'key1': 'key1value', 'key2': 'key2value' } );
*/
function add_url_params( $url, $params ){
var sharp = '';
!$params && ( $params = $url, $url = location.href );
$url.indexOf('#') > -1 && ( sharp = $url.split('#')[1], $url = $url.split('#')[0] );
for( var k in $params ){
$url = del_url_param($url, k);
$url.indexOf('?') > -1
? $url += '&' + k +'=' + $params[k]
: $url += '?' + k +'=' + $params[k];
}
sharp && ( $url += '#' + sharp );
$url = $url.replace(/\?\&/g, '?' );
return $url;
}
/**
* 取URL参数的值
* <br /><b>require:</b> del\_url\_param
* @method get_url_param
* @static
* @param {string} $url
* @param {string} $key
* @example
var defaultTag = get_url_param(location.href, 'tag');
*/
function get_url_param( $url, $key ){
var result = '', paramAr, i, items;
!$key && ( $key = $url, $url = location.href );
$url.indexOf('#') > -1 && ( $url = $url.split('#')[0] );
if( $url.indexOf('?') > -1 ){
paramAr = $url.split('?')[1].split('&');
for( i = 0; i < paramAr.length; i++ ){
items = paramAr[i].split('=');
items[0] = items[0].replace(/^\s+|\s+$/g, '');
if( items[0].toLowerCase() == $key.toLowerCase() ){
result = items[1];
break;
}
}
}
return result;
}
/**
* 删除URL参数
* @method del_url_param
* @static
* @param {string} $url
* @param {string} $key
* @example
var url = del_url_param( location.href, 'tag' );
*/
function del_url_param( $url, $key ){
var sharp = '', params, tmpParams = [], i, item;
!$key && ( $key = $url, $url = location.href );
$url.indexOf('#') > -1 && ( sharp = $url.split('#')[1], $url = $url.split('#')[0] );
if( $url.indexOf('?') > -1 ){
params = $url.split('?')[1].split('&');
$url = $url.split('?')[0];
for( i = 0; i < params.length; i++ ){
items = params[i].split('=');
items[0] = items[0].replace(/^\s+|\s+$/g, '');
if( items[0].toLowerCase() == $key.toLowerCase() ) continue;
tmpParams.push( items.join('=') )
}
$url += '?' + tmpParams.join('&');
}
sharp && ( $url += '#' + sharp );
return $url;
}
/**
* 提示需要 HTTP 环境
* @method httpRequire
* @static
* @param {string} _msg 要提示的文字, 默认 "本示例需要HTTP环境'
* @return bool 如果是HTTP环境返回true, 否则返回false
*/
function httpRequire( _msg ){
_msg = _msg || '本示例需要HTTP环境';
if( /file\:|\\/.test( location.href ) ){
alert( _msg );
return false;
}
return true;
}
/**
* 删除 URL 的锚点
* <br /><b>require:</b> add\_url\_params
* @method removeUrlSharp
* @static
* @param {string} $url
* @param {bool} $nornd 是否不添加随机参数
* @return string
*/
function removeUrlSharp($url, $nornd){
var url = $url.replace(/\#[\s\S]*/, '');
!$nornd && (url = add_url_params( url, { "rnd": new Date().getTime() } ) );
return url;
}
/**
* 重载页面
* <br /><b>require:</b> removeUrlSharp
* <br /><b>require:</b> add\_url\_params
* @method reload_page
* @static
* @param {string} $url
* @param {bool} $nornd
* @param {int} $delayms
*/
function reload_page( $url, $nornd, $delayms ){
$delayms = $delayms || 0;
setTimeout( function(){
$url = removeUrlSharp( $url || location.href, $nornd );
!$nornd && ( $url = add_url_params( $url, { 'rnd': new Date().getTime() } ) );
location.href = $url;
}, $delayms);
}
/**
* 取小数点的N位,
* <br />JS 解析 浮点数的时候,经常出现各种不可预知情况,这个函数就是为了解决这个问题
* @method parse_finance_num
* @static
* @param {number} $i
* @param {int} $dot
* @return number
*/
function parse_finance_num( $i, $dot ){
$i = parseFloat( $i ) || 0;
if( $i && $dot ) {
$i = Math.floor( $i * Math.pow( 10, $dot ) ) / Math.pow( 10, $dot );
}
return $i;
}
/**
* js 附加字串函数 pad_char_f
* @method pad_char_f
* @static
* @param {string} _str
* @param {intl} _len
* @param {string} _char
* @return string
*/
function pad_char_f( _str, _len, _char ){
_len = _len || 2; _char = _char || "0";
_str += '';
if( _str.length >_str ) return _str;
_str = new Array( _len + 1 ).join( _char ) + _str
return _str.slice( _str.length - _len );
}
/**
* 格式化日期为 YYYY-mm-dd 格式
* <br /><b>require</b>: pad\_char\_f
* @method formatISODate
* @static
* @param {date} _date 要格式化日期的日期对象
* @param {string|undefined} _split 定义年月日的分隔符, 默认为 '-'
* @return string
*
*/
function formatISODate( _date, _split ){
_date = _date || new Date(); typeof _split == 'undefined' && ( _split = '-' );
return [ _date.getFullYear(), pad_char_f( _date.getMonth() + 1 ), pad_char_f( _date.getDate() ) ].join(_split);
}
/**
* 从 ISODate 字符串解析日期对象
* @method parseISODate
* @static
* @param {string} _datestr
* @return date
*/
function parseISODate( _datestr ){
if( !_datestr ) return;
_datestr = _datestr.replace( /[^\d]+/g, '');
var _r;
if( _datestr.length === 8 ){
_r = new Date( _datestr.slice( 0, 4 )
, parseInt( _datestr.slice( 4, 6 ), 10 ) - 1
, parseInt( _datestr.slice( 6 ), 10 ) );
}
return _r;
}
/**
* 克隆日期对象
* @method cloneDate
* @static
* @param {Date} _date 需要克隆的日期
* @return {Date} 需要克隆的日期对象
*/
function cloneDate( _date ){ var d = new Date(); d.setTime( _date.getTime() ); return d; }
/**
* 判断两个日期是否为同一天
* @method isSameDay
* @static
* @param {Date} _d1 需要判断的日期1
* @param {Date} _d2 需要判断的日期2
* @return {bool}
*/
function isSameDay( _d1, _d2 ){
return [_d1.getFullYear(), _d1.getMonth(), _d1.getDate()].join() === [
_d2.getFullYear(), _d2.getMonth(), _d2.getDate()].join()
}
/**
* 判断两个日期是否为同一月份
* @method isSameMonth
* @static
* @param {Date} _d1 需要判断的日期1
* @param {Date} _d2 需要判断的日期2
* @return {bool}
*/
function isSameMonth( _d1, _d2 ){
return [_d1.getFullYear(), _d1.getMonth()].join() === [
_d2.getFullYear(), _d2.getMonth()].join()
}
/**
* 取得一个月份中最大的一天
* @method maxDayOfMonth
* @static
* @param {Date} _date
* @return {int} 月份中最大的一天
*/
function maxDayOfMonth( _date ){
var _r, _d = new Date( _date.getFullYear(), _date.getMonth() + 1 );
_d.setDate( _d.getDate() - 1 );
_r = _d.getDate();
return _r;
}
/**
* 取当前脚本标签的 src路径
* @method script_path_f
* @static
* @return {string} 脚本所在目录的完整路径
*/
function script_path_f(){
var _sc = document.getElementsByTagName('script'), _sc = _sc[ _sc.length - 1 ], _path = _sc.getAttribute('src');
if( /\//.test( _path ) ){ _path = _path.split('/'); _path.pop(); _path = _path.join('/') + '/'; }
else if( /\\/.test( _path ) ){ _path = _path.split('\\'); _path.pop(); _path = _path.join('\\') + '/'; }
return _path;
}
/**
* 缓动函数, 动画效果为按时间缓动
* <br />这个函数只考虑递增, 你如果需要递减的话, 在回调里用 _maxVal - _stepval
* @method easyEffect
* @static
* @param {function} _cb 缓动运动时的回调
* @param {number} _maxVal 缓动的最大值, default = 200
* @param {number} _startVal 缓动的起始值, default = 0
* @param {number} _duration 缓动的总时间, 单位毫秒, default = 200
* @param {number} _stepMs 缓动的间隔, 单位毫秒, default = 2
* @return interval
* @example
$(document).ready(function(){
window.js_output = $('span.js_output');
window.ls = [];
window.EFF_INTERVAL = easyEffect( effectcallback, 100);
});
function effectcallback( _stepval, _done ){
js_output.html( _stepval );
ls.push( _stepval );
!_done && js_output.html( _stepval );
_done && js_output.html( _stepval + '<br />' + ls.join() );
}
*/
function easyEffect( _cb, _maxVal, _startVal, _duration, _stepMs ){
var _beginDate = new Date(), _timepass
, _maxVal = _maxVal || 200, _startVal = _startVal || 0, _tmp = 0, _done
, _duration = _duration || 200, _stepMs = _stepMs || 2;
var _interval = setInterval(
function(){
_timepass = new Date() - _beginDate;
_tmp = _timepass / _duration * _maxVal;
_tmp += _startVal;
if( _tmp > _maxVal ){
_tmp = _maxVal;
_done = true;
clearInterval( _interval );
}
_cb && _cb( _tmp, _done );
}, _stepMs );
return _interval;
}
/**
* 把输入值转换为布尔值
* @method parseBool
* @param {*} _input
* @return bool
*/
function parseBool( _input ){
if( typeof _input == 'string' ){
_input = _input.replace( /[\s]/g, '' ).toLowerCase();
if( _input && ( _input == 'false'
|| _input == '0'
|| _input == 'null'
|| _input == 'undefined'
)) _input = false;
else if( _input ) _input = true;
}
return !!_input;
}