jquery如何解決resize執(zhí)行兩次的問(wèn)題
jquery解決resize執(zhí)行兩次問(wèn)題
代碼如下(示例):
? ? // - 解決resize執(zhí)行兩次的問(wèn)題 ? ? var n = 0; ? ? jQuery(window).resize(function () { ? ? ? n++; ? ? ? if (n % 2 == 0) { ? ? ? ? n = 0; ? ? ? ? //todo ? ? ? ? // console.log("todo"); ? ? ? } ? ? ? // console.log(n); ? ? });
谷歌瀏覽器在測(cè)試時(shí),當(dāng)窗口發(fā)生改變時(shí),resize()函數(shù)有時(shí)會(huì)執(zhí)行一次,有時(shí)會(huì)執(zhí)行兩次,所以改進(jìn)為下面代碼。
var resizeTimer = null; jQuery(window).resize(function () { ?? ?if (resizeTimer) clearTimeout(resizeTimer); ?? ?resizeTimer = setTimeout(function () { ?? ?// console.log("窗體發(fā)生改變了"); ?? ?//todo ?? ?}, 100); });
擴(kuò)展Jquery的resize方法
(原生的resize只針對(duì)window,因項(xiàng)目需要擴(kuò)展了此方法,目前只在DIV上使用過(guò),后續(xù)如果修改代碼會(huì)對(duì)此代碼進(jìn)行更新)
/** ?* 封裝非Window對(duì)象的resize方法 ?* callback:回調(diào)函數(shù)(長(zhǎng)寬發(fā)生變化時(shí)觸發(fā)) ?*/ $.fn.divResize=function(callback, setting){ ? ?var cycleTime = 250; // 定義監(jiān)控大小變化的時(shí)間 ? ?if(setting&&setting.cycleTime){ ? ? ? cycleTime = setting.cycleTime; ? ?} ? ?if(callback==undefined||callback==null){ ? ? ? return; ? ?} ? ?if(!(typeof callback == "function")){ ? ? ? return; ? ?} ? ?$(this).each(function(){ ? ? ? var resizeDom = this; ? ? ? resizeDom.data = {}; ? ? ? resizeDom.data.width = $(resizeDom).css("width"); // 存放當(dāng)前寬度 ? ? ? resizeDom.data.height = $(resizeDom).css("height"); // 存放當(dāng)前高度 ? ? ? resizeDom.callback = callback; ? ? ? // 定義監(jiān)控函數(shù) ? ? ? var resizeMonitor = function(){ ? ? ? ? ?// 判斷高度和寬度是否發(fā)生變化 ? ? ? ? ?if($(resizeDom).css("width")!=resizeDom.data.width||$(resizeDom).css("height")!=resizeDom.data.height){ ? ? ? ? ? ? resizeDom.data.width = $(resizeDom).css("width"); ? ? ? ? ? ? resizeDom.data.height = $(resizeDom).css("height"); ? ? ? ? ? ? resizeDom.callback(); ? ? ? ? ?} ? ? ? ? ?var callFunc = arguments.callee; // 獲取本身函數(shù) ? ? ? ? ?setTimeout(function(){callFunc();}, cycleTime); ? ? ? }; ? ? ? resizeMonitor(); ? ?}); };
/** ?* 擴(kuò)展resize方法(可支持window和非window對(duì)象) ?* callback:回調(diào)函數(shù)(長(zhǎng)寬發(fā)生變化時(shí)觸發(fā)) ?*/ ? ?$.fn.resizeOld = $.fn.resize; $.fn.resize=function(callback, setting){ ? ?$(this).each(function(){ ? ? ? ? ? ?var resizeDom = this; ? ? ? ?// 確定綁定的對(duì)象是否是window ? ? ? ? ? ?if (this == window) { ? ? ? ? ? ? ? ?$(window).resizeOld(function () { ? ? ? ? ? ? ? ? ? ?callback(); ? ? ? ? ? ? ? ?}); ? ? ? ? ? ?} else { ? ? ? ? ? ? ? ?resizeDom.callback = callback; ? ? ? ? ? ? ? ?$(this).divResize(callback, setting); ? ? ? ? ? ?} ? ?}); };
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery學(xué)習(xí)筆記之DOM對(duì)象和jQuery對(duì)象
DOM對(duì)象和jQuery對(duì)象的操作時(shí)很重要的,是jquery與頁(yè)面元素互動(dòng)的基礎(chǔ)。2010-12-12ajax實(shí)現(xiàn)動(dòng)態(tài)下拉框示例
本篇文章主要介紹了ajax實(shí)現(xiàn)動(dòng)態(tài)下拉框示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01jQuery 過(guò)濾not()與filter()實(shí)例代碼
下面兩種寫(xiě)法,都可以達(dá)到一樣的效果,not與filter是相反的過(guò)濾2012-05-05jQuery 跨域訪(fǎng)問(wèn)解決原理案例詳解
這篇文章主要介紹了jQuery 跨域訪(fǎng)問(wèn)解決原理案例詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07jquery 動(dòng)態(tài)遍歷select 賦值的實(shí)例
今天小編就為大家分享一篇jquery 動(dòng)態(tài)遍歷select 賦值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09基于jQuery實(shí)現(xiàn)的旋轉(zhuǎn)彩圈實(shí)例
這篇文章主要介紹了基于jQuery實(shí)現(xiàn)的旋轉(zhuǎn)彩圈,涉及jQuery定時(shí)操作頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2015-06-06一款Jquery 分頁(yè)插件的改造方法(服務(wù)器端分頁(yè))
分頁(yè)幾乎是每個(gè)外部程序必不可少的東西,在webform時(shí)代很多人都用過(guò)AspNetPager這個(gè)用戶(hù)控件吧,用的人之多其實(shí)就在于它的優(yōu)點(diǎn)2011-07-07基于jQuery的試卷自動(dòng)排版系統(tǒng)實(shí)現(xiàn)代碼
題目提干、選擇題的選項(xiàng)、說(shuō)明文字可以包含多媒體信息(文字、圖片、列表、表格、視頻等等……)。2011-01-01jQuery中的Deferred和promise 的區(qū)別
這篇文章主要介紹了jQuery中的Deferred和promise 的區(qū)別的相關(guān)資料,需要的朋友可以參考下2016-04-04