jquery函数扩展
(function(X, $) { var //FALSE = false, //TRUE = true, NULL = null, //toInt = parseInt, isIE6 = !!($.browser.msie && $.browser.version == '6.0'); $.extend($.fn, { /** * 文字放大渐隐 *@param {Number} num 增加数值 *@param {Number} times 放大倍数 *@return {jQuery} */ zoomText: function(num, times) { this.each(function() { var $clone, $el = $(this), offset = $el.offset(), text = $el.text(); times = isNaN(times) ? 2 : times; if (!isNaN(+text)) { text = +text + (num || 1); } $el.text(text); $clone = $el.clone() .attr('id', '') .css({ 'position': 'absolute', 'top': offset.top, 'left': offset.left, 'font': $el.css('font'), 'color': $el.css('color') }) .appendTo($(document.body)); var fontsize = times * parseInt($el.css('font-size')); $clone.animate({ 'font-size': fontsize, 'top': offset.top - ($el.height() / 4), 'left': offset.left - ($el.width() / 2), 'opacity': 0.1 }, { 'duration': 300, 'complete': function() { $clone.remove(); } }); }); return this; }, /** * 文本输入框加上聚焦清空,失焦停留提示功能。<br/> 如果利用{@link Xwb.ax.ValidationMgr}类作表单验证,制作类似功能时不必直接采用该方法, Validator类提供一系列验证器无需写代码即可轻松实现,详见该类的各种验证器。<br/> 如果当前文本框已经过{@link Xwb.ax.SelectionHolder}实例处理, 则focusText方法会利用当前{@link Xwb.ax.SelectionHolder}实例输出文本。 * @param {String} hoverText 停留提示文字 * @param {String} [focusStyle] 修饰样式类 * @param {DomSelector} [cssNode] * @param {Boolean} [removeOnFocus] 如果为false,当聚焦后添加css类,否则移除css类 <pre><code> $('#id').focusText('这里输入用户名', 'focusStyle'); </code></pre> */ focusText: function(text, css, cssNode, removeOnFocus) { this.each(function() { $(this).focus(function() { if (this.value === text) { var selHolder = $(this).data('xwb_selholder'); if (selHolder) selHolder.setText(''); else this.value = ''; } if (css) { if (removeOnFocus) $(cssNode || this).removeClass(css); else $(cssNode || this).addClass(css); } }) .blur(function() { if ($.trim(this.value) === '') { var selHolder = $(this).data('xwb_selholder'); if (selHolder) selHolder.setText(text); else this.value = text; } if (css) { if (removeOnFocus) $(cssNode || this).addClass(css); else $(cssNode || this).removeClass(css); } }); }); }, /** * 方法使用'hidden'样式控制元素的显示或隐藏状态。 * 如果无参数,返回当前元素hidden样式的状态,否则利用'hidden'CSS类进行隐藏或显示元素。 <pre><code> // 获得显示状态 if ($('#id').cssDisplay()) {} // 显示 $('#id').cssDisplay(true); </code></pre> *@return {Boolean|jQuery} */ cssDisplay: function(b) { var len = this.length; if (len) { if (len === 1) { if (b === undefined) { var v = !this.hasClass('hidden'); return v; } else { if (b) this.removeClass('hidden'); else this.addClass('hidden'); } } else { this.each(function() { if (b) $(this).removeClass('hidden'); else $(this).addClass('hidden'); }); } } return this; }, /** * 检查是否含有某个样式,如果有,添加或删除该样式. * @param {String} css 样式名称 * @param {Boolean} addOrRemove true 时添加样式,false时移除该样式 * @return {jQuery} this */ checkClass: function(cs, b) { if (cs) { this.each(function() { var jq = $(this); var hc = jq.hasClass(cs); if (b) { if (!hc) jq.addClass(cs); } else if (hc) { jq.removeClass(cs); } }); } return this; }, /** * 开关效果 * @param {String} css 样式名称 * @param {Boolean} addOrRemove true 时添加样式,false时移除该样式 * @return {jQuery} this */ selectChecked: function(e) { if (e) { var jq = $(this); var parent = $(this).parents('.onoff'); var hc = jq.hasClass('selected'); if (!hc) { jq.addClass('selected').siblings().removeClass('selected'); $('.checkbox', parent).attr('checked', true); } } return this; }, /** * 替换view元素样式类.<br/> * <code>comp.switchClass('mouseoverCss', 'mouseoutCss');</code><br/> * @param {String} oldSty 已存在的CSS类名 * @param {String} newSty 新的CSS类名 * @return {Object} this */ switchClass: function(oldSty, newSty) { this.each(function() { var jq = $(this); jq.removeClass(oldSty); jq.addClass(newSty); }); return this; }, /** * 获得相对于viewport的位置,只适用于单个元素 * @return {left, top} */ absolutePos: function() { var off = this.offset(), doc = $(document); var st = doc.scrollTop(), sl = doc.scrollLeft(); off.left -= sl; off.top -= st; return off; }, slideMenu: function(slideLayer, hoverCs) { this.each(function() { (function(jq) { var layer = jq.find(slideLayer); var setTimer, clsTimer; function slidedown() { layer.show().cssDisplay(true); if (hoverCs) jq.addClass(hoverCs); } function slideup() { if (hoverCs) jq.removeClass(hoverCs); layer.cssDisplay(false); } function clear() { if (setTimer) { clearTimeout(setTimer); setTimer = false; } clsTimer = setTimeout(slideup, 80); } function set() { if (clsTimer) { clearTimeout(clsTimer); clsTimer = false; } setTimer = setTimeout(slidedown, 100); } jq.hover(set, clear); })($(this)); }); }, /** * 截取内容 *@param {Number} num 位置,默认10 *@param {Boolean} hasFace 是否显示表情图片,否为文字代替 *@param {String} postfix 后缀 *@return jQuery */ substrText: function(num, hasFace, postfix) { var re = new RegExp('(?:<a.*?>.*?<\\/a>)|(?:<img.*?>)|.', 'gi'); this.each(function() { var //cache = [], postfix = postfix || '...', text = this.innerHTML, match = text.match(re); num = num || 10; if (match && match.length > num) { match = match.slice(0, num).join(''); text = hasFace ? match : match.replace(/<img.*?title=\"(.*?)\".*?>/gi, '[$1]'); $(this).html(text + postfix); } }); return this; }, /** * IE6修复PNG图片 *@return jQuery */ fixPng: function() { if (isIE6) { var fixFn = function() { if (this.tagName == 'IMG') { var $img = $('<span></span>').css({ width: this.offsetWidth, height: this.offsetHeight, display: 'inline-block' }); $img[0].style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + this.src + '", sizingMethod="crop")'; $(this).replaceWith($img); } }; this.each(function() { if (this.complete) { fixFn.call(this); } else { this.onload = fixFn; } }); } return this; }, scrollView: function() { var parent = this, childrens = parent.children(), //时间触发计时器 timer, //滚动触发周期, 真实等待时间应该为 delay - 1000 - 500 //1000是滚动效果的时长 //500是淡入效果时长 delay = 4000; if (!childrens.length) { return; } //滚动到下一条 function scrollToNext(callback) { var $last = $(parent.children(':last')); var height = $last.height(); $last .height(0) .css({ opacity: 0, 'font-size': 0, overflow: 'hidden' }) .remove() .prependTo(parent) .animate({ height: height }, 1000, 'cubicOut', function() { $last.css({ 'font-size': '12px' }); }) .animate({ opacity: 1 }, 500, function() { !timer && $.isFunction(callback) && callback(); }); } //设置计时器,开始滚动 function startScroll() { if (!timer) { timer = window.setInterval(scrollToNext, delay); } } //计算内容高度,如果内容高度小于等于高度,则不启动滚动效果 var contentHeight = 0; $.each(childrens, function(i, node) { contentHeight += $(node).height(); }); if (contentHeight > parent.height()) { //鼠标飘过的控制, //mouseover时停止计时器,但当前的滚动会继续,直至单次完成。 parent.hover(function() { if (timer) { timer = window.clearInterval(timer); } }, function() { startScroll(); }); startScroll(); } }, //整块的循环移动 //Count 一次移动子元素数量 //delay 移动间隔时间 //animateTime 动画执行时间 scrollMass: function(Count, delay, animateTime) { var parent = this, length = parent.children().length, timer, delay = delay, tmp = parent.children()[0].offsetWidth * Count, p = false; if (length <= Count) { return this; } function scrollNext() { parent.animate({ marginLeft: -tmp }, animateTime ? animateTime : 1000, function() { if (timer !== 0) { parent.css('marginLeft', 0); parent.append(parent.children(':lt(' + Count + ')')); } if (p) return; start(); }); } start = function() { timer = window.setTimeout(scrollNext, delay); }; this.hover(function() { p = true; clearTimeout(timer); }, function() { p = false; start(); }); start(); return this; } }); (function($, wp, wps, window, undefined) { '$:nomunge'; var $w = $(window), waypoints = [], oldScroll = -99999, didScroll = false, didResize = false, eventName = 'waypoint.reached', methods = { init: function(f, options) { this.each(function() { var $this = $(this), ndx = waypointIndex($this), base = ndx < 0 ? $.fn[wp].defaults : waypoints[ndx].options, opts = $.extend({}, base, options); opts.offset = opts.offset === "bottom-in-view" ? function() { return $[wps]('viewportHeight') - $(this).outerHeight(); } : opts.offset; if (ndx < 0) { waypoints.push({ element: $this, offset: $this.offset().top, options: opts }); } else { waypoints[ndx].options = opts; } f && $this.bind(eventName, f); }); $[wps]('refresh'); return this; }, remove: function() { return this.each(function() { var ndx = waypointIndex($(this)); if (ndx >= 0) { waypoints.splice(ndx, 1); } }); }, destroy: function() { return this.unbind(eventName)[wp]('remove'); } }; waypointIndex = function(el) { var i = waypoints.length - 1; while (i >= 0 && waypoints[i].element[0] !== el[0]) { i -= 1; } return i; }; function triggerWaypoint(way, dir) { way.element.trigger(eventName, dir); if (way.options.triggerOnce) { way.element[wp]('destroy'); } } function doScroll() { var newScroll = $w.scrollTop(), isDown = newScroll > oldScroll, pointsHit = $.grep(waypoints, function(el, i) { return isDown ? (el.offset > oldScroll && el.offset <= newScroll) : (el.offset <= oldScroll && el.offset > newScroll); }); if (!oldScroll || !newScroll) { $[wps]('refresh'); } oldScroll = newScroll; if (!pointsHit.length) return; if ($[wps].settings.continuous) { $.each(isDown ? pointsHit : pointsHit.reverse(), function(i, point) { triggerWaypoint(point, [isDown ? 'down' : 'up']); }); } else { triggerWaypoint(pointsHit[isDown ? pointsHit.length - 1 : 0], [isDown ? 'down' : 'up']); } } $.fn[wp] = function(method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === "function" || !method) { return methods.init.apply(this, arguments); } else if (typeof method === "object") { return methods.init.apply(this, [null, method]); } else { $.error('Method ' + method + ' does not exist on jQuery' + wp); } }; $.fn[wp].defaults = { offset: 0, triggerOnce: false }; var jQMethods = { refresh: function() { $.each(waypoints, function(i, o) { var adjustment = 0, oldOffset = o.offset; if (typeof o.options.offset === "function") { adjustment = o.options.offset.apply(o.element); } else if (typeof o.options.offset === "string") { var amount = parseFloat(o.options.offset), adjustment = o.options.offset.indexOf("%") ? Math.ceil($[wps]('viewportHeight') * (amount / 100)) : amount; } else { adjustment = o.options.offset; } o.offset = o.element.offset().top - adjustment; if (oldScroll > oldOffset && oldScroll <= o.offset) { triggerWaypoint(o, ['up']); } else if (oldScroll < oldOffset && oldScroll >= o.offset) { triggerWaypoint(o, ['down']); } }); waypoints.sort(function(a, b) { return a.offset - b.offset; }); }, viewportHeight: function() { return (window.innerHeight ? window.innerHeight : $w.height()); }, aggregate: function() { var points = $(); $.each(waypoints, function(i, e) { points = points.add(e.element); }); return points; } }; $[wps] = function(method) { if (jQMethods[method]) { return jQMethods[method].apply(this); } else { return jQMethods.aggregate(); } }; $[wps].settings = { continuous: true, resizeThrottle: 200, scrollThrottle: 100 }; $w.scroll(function() { if (!didScroll) { didScroll = true; window.setTimeout(function() { doScroll(); didScroll = false; }, $[wps].settings.scrollThrottle); } }).resize(function() { if (!didResize) { didResize = true; window.setTimeout(function() { $[wps]('refresh'); didResize = false; }, $[wps].settings.resizeThrottle); } }).load(function() { $[wps]('refresh'); doScroll(); }); })(jQuery, 'waypoint', 'waypoints', this); /** * md5加密 */ var rotateLeft = function(lValue, iShiftBits) { return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); }; var addUnsigned = function(lX, lY) { var lX4, lY4, lX8, lY8, lResult; lX8 = (lX & 0x80000000); lY8 = (lY & 0x80000000); lX4 = (lX & 0x40000000); lY4 = (lY & 0x40000000); lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); if (lX4 & lY4) return (lResult ^ 0x80000000 ^ lX8 ^ lY8); if (lX4 | lY4) { if (lResult & 0x40000000) return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); else return (lResult ^ 0x40000000 ^ lX8 ^ lY8); } else { return (lResult ^ lX8 ^ lY8); } }; var F = function(x, y, z) { return (x & y) | ((~ x) & z); }; var G = function(x, y, z) { return (x & z) | (y & (~ z)); }; var H = function(x, y, z) { return (x ^ y ^ z); }; var I = function(x, y, z) { return (y ^ (x | (~ z))); }; var FF = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(F(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var GG = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(G(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var HH = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(H(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var II = function(a, b, c, d, x, s, ac) { a = addUnsigned(a, addUnsigned(addUnsigned(I(b, c, d), x), ac)); return addUnsigned(rotateLeft(a, s), b); }; var convertToWordArray = function(string) { var lWordCount; var lMessageLength = string.length; var lNumberOfWordsTempOne = lMessageLength + 8; var lNumberOfWordsTempTwo = (lNumberOfWordsTempOne - (lNumberOfWordsTempOne % 64)) / 64; var lNumberOfWords = (lNumberOfWordsTempTwo + 1) * 16; var lWordArray = Array(lNumberOfWords - 1); var lBytePosition = 0; var lByteCount = 0; while (lByteCount < lMessageLength) { lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePosition = (lByteCount % 4) * 8; lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); lByteCount++; } lWordCount = (lByteCount - (lByteCount % 4)) / 4; lBytePosition = (lByteCount % 4) * 8; lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); lWordArray[lNumberOfWords - 2] = lMessageLength << 3; lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; return lWordArray; }; var wordToHex = function(lValue) { var WordToHexValue = "", WordToHexValueTemp = "", lByte, lCount; for (lCount = 0; lCount <= 3; lCount++) { lByte = (lValue >>> (lCount * 8)) & 255; WordToHexValueTemp = "0" + lByte.toString(16); WordToHexValue = WordToHexValue + WordToHexValueTemp.substr(WordToHexValueTemp.length - 2, 2); } return WordToHexValue; }; var uTF8Encode = function(string) { string = string.replace(/\x0d\x0a/g, "\x0a"); var output = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { output += String.fromCharCode(c); } else if ((c > 127) && (c < 2048)) { output += String.fromCharCode((c >> 6) | 192); output += String.fromCharCode((c & 63) | 128); } else { output += String.fromCharCode((c >> 12) | 224); output += String.fromCharCode(((c >> 6) & 63) | 128); output += String.fromCharCode((c & 63) | 128); } } return output; }; $.extend({ md5: function(string) { var x = Array(); var k, AA, BB, CC, DD, a, b, c, d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9 , S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; string = uTF8Encode(string); x = convertToWordArray(string); a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; for (k = 0; k < x.length; k += 16) { AA = a; BB = b; CC = c; DD = d; a = FF(a, b, c, d, x[k+0], S11, 0xD76AA478); d = FF(d, a, b, c, x[k+1], S12, 0xE8C7B756); c = FF(c, d, a, b, x[k+2], S13, 0x242070DB); b = FF(b, c, d, a, x[k+3], S14, 0xC1BDCEEE); a = FF(a, b, c, d, x[k+4], S11, 0xF57C0FAF); d = FF(d, a, b, c, x[k+5], S12, 0x4787C62A); c = FF(c, d, a, b, x[k+6], S13, 0xA8304613); b = FF(b, c, d, a, x[k+7], S14, 0xFD469501); a = FF(a, b, c, d, x[k+8], S11, 0x698098D8); d = FF(d, a, b, c, x[k+9], S12, 0x8B44F7AF); c = FF(c, d, a, b, x[k+10], S13, 0xFFFF5BB1); b = FF(b, c, d, a, x[k+11], S14, 0x895CD7BE); a = FF(a, b, c, d, x[k+12], S11, 0x6B901122); d = FF(d, a, b, c, x[k+13], S12, 0xFD987193); c = FF(c, d, a, b, x[k+14], S13, 0xA679438E); b = FF(b, c, d, a, x[k+15], S14, 0x49B40821); a = GG(a, b, c, d, x[k+1], S21, 0xF61E2562); d = GG(d, a, b, c, x[k+6], S22, 0xC040B340); c = GG(c, d, a, b, x[k+11], S23, 0x265E5A51); b = GG(b, c, d, a, x[k+0], S24, 0xE9B6C7AA); a = GG(a, b, c, d, x[k+5], S21, 0xD62F105D); d = GG(d, a, b, c, x[k+10], S22, 0x2441453); c = GG(c, d, a, b, x[k+15], S23, 0xD8A1E681); b = GG(b, c, d, a, x[k+4], S24, 0xE7D3FBC8); a = GG(a, b, c, d, x[k+9], S21, 0x21E1CDE6); d = GG(d, a, b, c, x[k+14], S22, 0xC33707D6); c = GG(c, d, a, b, x[k+3], S23, 0xF4D50D87); b = GG(b, c, d, a, x[k+8], S24, 0x455A14ED); a = GG(a, b, c, d, x[k+13], S21, 0xA9E3E905); d = GG(d, a, b, c, x[k+2], S22, 0xFCEFA3F8); c = GG(c, d, a, b, x[k+7], S23, 0x676F02D9); b = GG(b, c, d, a, x[k+12], S24, 0x8D2A4C8A); a = HH(a, b, c, d, x[k+5], S31, 0xFFFA3942); d = HH(d, a, b, c, x[k+8], S32, 0x8771F681); c = HH(c, d, a, b, x[k+11], S33, 0x6D9D6122); b = HH(b, c, d, a, x[k+14], S34, 0xFDE5380C); a = HH(a, b, c, d, x[k+1], S31, 0xA4BEEA44); d = HH(d, a, b, c, x[k+4], S32, 0x4BDECFA9); c = HH(c, d, a, b, x[k+7], S33, 0xF6BB4B60); b = HH(b, c, d, a, x[k+10], S34, 0xBEBFBC70); a = HH(a, b, c, d, x[k+13], S31, 0x289B7EC6); d = HH(d, a, b, c, x[k+0], S32, 0xEAA127FA); c = HH(c, d, a, b, x[k+3], S33, 0xD4EF3085); b = HH(b, c, d, a, x[k+6], S34, 0x4881D05); a = HH(a, b, c, d, x[k+9], S31, 0xD9D4D039); d = HH(d, a, b, c, x[k+12], S32, 0xE6DB99E5); c = HH(c, d, a, b, x[k+15], S33, 0x1FA27CF8); b = HH(b, c, d, a, x[k+2], S34, 0xC4AC5665); a = II(a, b, c, d, x[k+0], S41, 0xF4292244); d = II(d, a, b, c, x[k+7], S42, 0x432AFF97); c = II(c, d, a, b, x[k+14], S43, 0xAB9423A7); b = II(b, c, d, a, x[k+5], S44, 0xFC93A039); a = II(a, b, c, d, x[k+12], S41, 0x655B59C3); d = II(d, a, b, c, x[k+3], S42, 0x8F0CCC92); c = II(c, d, a, b, x[k+10], S43, 0xFFEFF47D); b = II(b, c, d, a, x[k+1], S44, 0x85845DD1); a = II(a, b, c, d, x[k+8], S41, 0x6FA87E4F); d = II(d, a, b, c, x[k+15], S42, 0xFE2CE6E0); c = II(c, d, a, b, x[k+6], S43, 0xA3014314); b = II(b, c, d, a, x[k+13], S44, 0x4E0811A1); a = II(a, b, c, d, x[k+4], S41, 0xF7537E82); d = II(d, a, b, c, x[k+11], S42, 0xBD3AF235); c = II(c, d, a, b, x[k+2], S43, 0x2AD7D2BB); b = II(b, c, d, a, x[k+9], S44, 0xEB86D391); a = addUnsigned(a, AA); b = addUnsigned(b, BB); c = addUnsigned(c, CC); d = addUnsigned(d, DD); } var tempValue = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); return tempValue.toLowerCase(); } }); /** * 获得或设置cookie * @param {String} name * @param {String} value * @param {Object} options * @method */ $.cookie = function(name, value, options) { if (typeof value != 'undefined') { // name and value given, set cookie options = options || {}; if (value === NULL) { value = ''; options.expires = -1; } var expires = ''; if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { var date; if (typeof options.expires == 'number') { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE } // CAUTION: Needed to parenthesize options.path and options.domain // in the following expressions, otherwise they evaluate to undefined // in the packed version for some reason... var path = options.path ? '; path=' + (options.path) : ''; var domain = options.domain ? '; domain=' + (options.domain) : ''; var secure = options.secure ? '; secure' : ''; document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); } else { // only name given, get cookie var cookieValue = NULL; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } }; $.easing.cubicOut = function(x, t, b, c, d) { return c * ((t = t / d - 1) * t * t + 1) + b; }; })(Exiu, jQuery);
请把你的疑问评论在下方。

浙公网安备 33010602011771号