老司机91精品网站在线观看-老司机67194免费观看-老司国产精品视频-老熟人老女人国产老太-中文字幕日本在线-中文字幕日本一区久久

關于圖片列表的寬度自適應解決辦法

2012-9-19    藍藍設計的小編

 

 轉載藍藍設計(  www.hk66688.com  )是一家專注而深入的設計機構 ,為期望卓越的國內外企業提供有效的   BS界面設計 、  cs界面設計 、  ipad界面設計  、  包裝設計 、  圖標定制 、  用戶體驗 、交互設計、  網站建設 、平面設計服務

來源:http://www.uisheji.com/114057.html

如果您想訂閱本博客內容,每天自動發到您的郵箱中,          請點這里

從事網頁重構好幾年了,Javascript能力一直比較菜,主要還是做得太少。為了提高這方面的能力,這段時間主動承擔了一些這方面的工作,真心感到學習和積累的不易,不過時常伴隨著一些解決問題之后的小小成就感又讓人樂此不疲。

在近期一個項目中,遇到一個圖片列表自適應寬度顯示的問題,需求本身并不難,借此且算是梳理和總結一下當時的解決思路吧,也期望能給有需要做這類需求而又知如何下手的同學帶來一點小啟發。實現的方法應該很多,如果你有更好的,要分享哦~~

關于圖片列表的寬度自適應解決辦法

需求是這樣的,在一個自適應寬度的欄目里(如圖1):

關于圖片列表的寬度自適應解決辦法

1、  欄目的寬度可以因用戶的操作發生改變,如拖拽改變窗口大小等; 
2、  當寬度改變之后,需要圖片列表總是能在欄目中完好地顯示:圖片之間有一定的間距,并且不會出現半張圖。 
3、  若當前寬度不能完全顯示所有圖片時,可以通過點擊左右兩邊的箭頭進行滾動顯示。如圖2:

關于圖片列表的寬度自適應解決辦法

經過分析我們可以把需求分解為:欄目的寬度自適應、圖片列表的自適應顯示、列表的左右滾動。欄目的寬度自適應,可以直接用樣式來解決,寬度的獲取也簡單,不再多說。圖片的滾動也還好說,無非就是通過樣式改變列表的左右位置來實現。難點在于,在一個寬度會各種變化的區域中,怎么讓圖片列表自適應顯示呢?

對比圖1、圖2,我們發現前后的變化有:欄目寬度、圖片顯示個數、圖片之間的間距。寬度自適應好辦,那圖片個數和間距呢?嗯哪,這就是我們需要解決的核心問題。

1、關于可視區域

再看圖2,欄目中只有3個圖片,我們知道是因為其它部分被樣式隱藏了,而整個圖片列表其實是一直存在的一個整體。就像Flash里的遮罩一樣,我們要做的其實是按照用戶的意愿控制圖片列表的某一部分顯示給用戶看到。為便于后面好講,我們把用戶可以看到的這部分列表區域稱為列表的可視區域 。它的特點是隨著當前欄目的寬度變化而變化,如圖3:

關于圖片列表的寬度自適應解決辦法

圖片列表是死的,欄目寬度是變化的,如何讓圖片列表適應欄目寬度的變化完好顯示在可視區域里呢?好吧,你已經想到了…答案就是通過改變圖片之間的間距來實現。如圖4:

關于圖片列表的寬度自適應解決辦法

那么我們可以得出: 
可視區域的寬度  = 可視區域內可顯示的圖片寬度總和(下文稱可視圖片數 ) + 圖片間距 總和

2、計算可視圖片數

事情的關鍵是顯示圖片,我們就從計算可視圖片數開始。可視區域的寬度我們可以輕易獲取,所有圖片的寬度也是統一的尺寸(什么?不統一?還好還好,我們這的產品經理倒是還沒有BT到這個地步呢^^~ 這里還是先講固定的情況吧,不固定的情況下回再探討)。先忽略一下圖片間距,那么問題可以簡化為:

可視圖片數  = 可視區域寬度 / 單位圖片寬度

代碼(代碼中涉及到的html代碼請查看下文Demo):

//獲取當前可視區域的寬度
var pLstWrpWth = $('.jQ_ptLst').width();
//獲取單位圖片寬度(圖片可能包括邊框樣式等,取列表元素Li的寬度參與計算以避免誤差)
var valLstLiWth = $('.jQ_ptLst li').width();
//計算當前可視圖片數(可視區域寬度 / 單位圖片寬度 再取整)
valImgLth = Math.floor(pLstWrpWth / valLstLiWth);

3、計算圖片間距

那間距怎么計算呢?從圖4我們可以看出,除去所有可視圖片的寬度剩下的就是間距的總和。于是:

間距總和 = 可視區域寬度 – 單位圖片寬度 * 可視圖片數

這樣我們就可以計算圖片間距了:

圖片間距 = 間距總和(除去可視圖片寬度的可視區域寬度) / 間距個數(即可視圖片數+1,為何+1?看圖4)

代碼:

//向上取整可避免小數帶來的誤差)
valpLstMg = Math.ceil((pLstWrpWth - valImgLth * valLstLiWth) / (valImgLth + 1)); 

到這里,你會發現,其實最終需要解決的問題就是計算圖片間距。有了間距,我們就已經能做到根據欄目寬度,完好顯示可視區域的圖片了。至于能顯示多少圖,此時我們已經不關心了。

4、需要注意的情況

當上面計算出來的間距總和很小,或者干脆為0了… 如圖5:

關于圖片列表的寬度自適應解決辦法

像基友一樣合在一起顯然不好看~ – 此時,我們可以設定一個最小間距來解決這個問題。當計算出的間距小于這個間距時,就減少1個可視圖片,把原本屬于這個圖片的寬度分配給其余的圖片作為間距。代碼:

var pLstLesMg = 5;         //設定最小間距,即臨界間距
if(valpLstMg < pLstLesMg){
    valImgLth = valImgLth - 1;  //當間距小于臨界間距時,可視圖片數-1
    fnpLstMg();         //重新計算可視圖片數-1之后的間距
};

還有一種情況,如圖6:

關于圖片列表的寬度自適應解決辦法

可視圖片數 大于列表總圖片數 時(還有等于的情況哦),圖片總數即為可視圖片數。代碼:

var pLstImgLth = $('.jQ_ptLst').find('img').length;    //獲取圖片總數
if(valImgLth >= pLstImgLth){
    valImgLth = pLstImgLth;  //圖片總數即為可視圖片數
    fnpLstMg();      //用新可視圖片數重新計算間距
    $('.jQ_plstRoRt').hide();//隱藏向右滾動箭頭(初始化時可默認左箭頭隱藏,右箭頭顯示)
};

到這里,基本上圖片列表自適應寬度顯示就解決了,接下來就是圖片列表的滾動問題。

5、列表滾動

有經驗的同學可能一下就想到了,問題的關鍵是要怎么判斷當前滾動的是否為最后一張圖片(啊?你是說做循環滾動?滾到最后一張無縫拼接第一張圖,如此永遠滾下去?其實,我只是想說,你們的產品經理心眼真好~ 嗯好吧,看在大家都不容易的份上,我們姑且還是探討一下這種情況吧)。

那么如何知道滾到最后一張圖片了呢?我想的辦法是通過寬度計算,即:

已滾動總寬度 等于非可視區域寬度 (即可視區域兩側的寬度之和)時,即不能再向右滾動了。如圖7:

關于圖片列表的寬度自適應解決辦法

代碼:

var ptLstCurMg = parseInt(pLstRoWrp.css('margin-left')); //獲取當前已滾動寬度
//當已滾動寬度 = 非可視區寬度,即已滾動至最后一圖
var ptLstRoWth = (pLstImgLth - valImgLth) * (ptLstImgMg + valLstLiWth);
if(ptLstCurMg + ptLstRoWth == 0){
    $this.hide();   //隱藏右箭頭
};

以上是向右滾的情況,向左滾時就簡單了。當已滾動寬度為0時,即是向左滾動到頭了。

//當已滾動寬度 = 0,即已滾動至最前一圖
if(ptLstCurMg == 0){
    $this.hide();   //隱藏左箭頭
};

6、綁定方法

圖片列表滾動講完了,接下來就是執行這些方法了。為了自適應用戶適時改變窗口大小的情況,需要將自適應函數綁定到resize方法中執行,代碼:

//一旦窗口大小發生變化即會執行
$(window).resize(function(){
    fnAutoWth();    //自適應方法
});

啰嗦這么多,其實主要圍繞兩個問題:

a. 通過計算圖片間距控制列表的顯示

b. 通過寬度計算解決滾動至最末

OK~點擊這里是DEMO …(用瀏覽器打開之后,通過改變窗口大小,體驗圖片列表自適應效果。)

小思考 (沒看DEMO的同學可以不用思考哦~):將DEMO用瀏覽器打開后,拖動窗口至最小寬度,即當前欄目寬度小于圖片寬度時(小不動?用Chrome試試),列表中看不到圖了,為什么?如何解決呢?

整個過程其實還是挺簡單的,不知道我有沒說清楚,大家有沒聽明白?如果沒說清楚的地方正好你又感興趣,可以留言哦~親。不過,如果您是個修為高深的化神期強者,也希望多多指出不當之處啊,感謝感謝~~小可尚徘徊于筑基期~露怯…..學好JS說了好多年,想想那些年……所以,朋友,如果你也是個網頁重構,別光寫DIV了,有空多學學寫寫JS吧,挺有意思的呢~

話說,互聯網發展日新月異,各種新技術層不出窮,需要學習的東西還真多呢。。。加油~

各種學壓力大呀~ 要不,放松一下先擼一把?好吧… 小明、小純 艾歐尼亞,搞起~~~

(轉載請注明出處GDC)

日歷

鏈接

個人資料

藍藍設計的小編 http://www.hk66688.com

存檔

亚洲午夜福利AV一区二区无码 | 99热精品国产三级在线| 欧美大屁股XXXX高跟欧美黑人| WW欧日韩视频高清在线| 日韩AV无码久久一区二区| 亚洲另类欧美综合久久图片区| 久久久精品成人免费观看国产| 最新中文AV岛国无码免费播放| 人妻 日韩 欧美 综合 制服| 多肉到处做的古文| 无码A∨高潮抽搐流白浆8MAV| 韩国免费A级毛片| 亚洲中文字幕无码爆乳APP| 欧美乱码伦视频免费| 成熟丰满女人丰满妇女aⅴ| 偷窥 性别 瘾 XXXXX| 精品亚洲自慰AV无码喷奶水| 中文字幕日韩人妻| 欧美黑人巨大精品VIDEOS| 饭桌上故意张开腿让公在线观| 色哟哟在线视频精品一区| 国产手机AV片在线无码观你| 亚洲人成伊人成综合网久久久| 免费观看日本XXXXX视频高潮| XXXX18HD亚洲HD护士| 天堂いっしょにしよ在线| 狠狠躁夜夜躁人人爽超碰97香蕉| 一本一道AⅤ无码中文字幕| 欧美一级草B内射| 国产成人无码AV片在线观看不卡| 亚洲国产欧美在线人成长黄瓜 | 国产AⅤ无码专区亚洲AV麻豆| 亚洲AV无码精品色夜午夜网址 | 成 人 免 费 黄 色| 五月丁香色综合久久4438| 久久精品高清一区二区三区| 97久久香蕉国产线看观看| 色欲狠狠躁天天躁无码中文字幕| 国精产品W灬源码1688伊在| 亚洲日本VA中文字幕| 看黄A大片日本真人视频直播| 啊灬啊灬啊灬快灬高潮少| 无码人妻一区二区三区免费看| 精品一区二区三区无码视频 | 深入浅出糙汉X软妹V1V| 韩国三级L中文字幕无码| 中文乱码在线中文字幕中文乱码| 日韩成人免费VA毛片| 好男人在在线社区WWW在线影院| 亚洲女同精品一区二区| 欧美人妻AⅤ中文字幕| 国产精品日日摸夜夜添夜夜添| 亚洲无人区一码二码三码区别 | 无码AV无码一区二区| 久久久久久精品久久久| 抱着边走边撞水流了一地的水| 性偷窥TUBE凸凹视频| 麻豆人妻少妇精品无码专区2 | 一本一本大道香蕉久在线精品| 日本BBWW高潮BBWR| 99久久国产综合精品SWAG| 日本肉体裸交XXXXBBBB| 娇妻被猛男老外玩三PAV| 99精品视频在线观看婷婷| 无码热综合无码色综合| 美女GIF趴跪式抽搐动态图| 高清FREESEXMOVIES性TV出水| 亚洲A∨精品一区二区三区| 妺妺窝人体色WWW精品| 国产精品看高国产精品不卡| 在线精品亚洲一区二区绿巨人| 色婷婷五月综合丁香中文字幕| 精品亚洲国产AⅤ在线| VIDEOSSEX变态狂另类| 无人区卡一卡二入口| 乱色熟女综合一区二区三区| 公翁的粗大放进我的秘密小说| 夜夜高潮天天爽欧美| 色欲色香天天天综合VVV| 久久精品亚洲精品无码金尊| 豆国产97在线 | 亚洲| 亚洲精品国产美女久久久99| 嫩草伊人久久精品少妇AV| 国产色无码精品视频免费| 18禁动漫无码无遮挡免费看| 午夜福利国产成人无码GIF动图| 男女裸体下面进入的免费视频 | 艳妇乳肉豪妇荡乳ⅩXXOO| 少妇人妻偷人精品无码视频| 狂猛欧美激情性XXXX在线观看| 国产XXXX农村野外高潮HD发| 又色又爽又黄的视频软件APP| 日产幕无线码三区在线| 久久久国产精华液| 国产成人无码精品XXXX| 中文字日产幕码三区的做法大全| 无码人妻AⅤ一区二区三区夏目| 欧美 日韩 国产 亚洲 色| 国语第一次处破女| А√天堂资源在线官网| 亚洲AV毛茸茸av成熟女人| 人妻内射.PORN| 久久精品国产一区二区电影| 国产成人午夜性A一级毛片老女人| 伊人久久大香线焦AV综合影院| 无码人妻一区二区三区一| 人妻少妇乱子伦无码视频专区 | 精品人妻少妇一区二区三区| 丁香花高清在线观看完整版| 在线观看成人网站| 羞羞漫画_成人漫画_成人专用| 人妻少妇粗大持久满足| 久久久久久久精品国产亚洲87| 东京热人妻无码一区二区AV| 中国亚洲女人69内射少妇| 亚洲AV无码精品色午夜果冻不卡| 日本熟妇人妻ⅩXXXX| 久久在精品线影院精品国产| 国产香蕉97碰碰久久人人| 菠萝蜜一线二线三线品牌| 亚洲男人AV天堂男人社区| 我们还没在书房试过| 青青青国产手线观看视频2019| 久久精品无码一区二区WWW | 中文字幕人成乱码熟女免费| 亚洲VA久久久噜噜噜久久无码| 日本高清色视频WWW·174| 久久亚洲私人国产精品| 国内精品久久久久久不卡影院| 房东天天吃我奶躁我| 99RE6热这里只精品首页| 亚洲午夜性春猛交ⅩXXX| 久久精品人人看人人爽| 国产乱人伦精品一区二区| 国产AV无码精品色午夜| 波多野结衣在线观看AV| 99热精品国产三级在线| 制服 丝袜 有码 无码 中文| 亚洲女人人体ASS| 亚洲AV伊人久久青青草原| 无翼乌全彩工口里番库| 天干天干夜天干天天爽| 日韩精品无码熟人妻视频| 欧美性受XXXX视频| 女人浓毛巨茎ⅩXXOOO| 美女脱个精光露出奶头和尿口| 久久精品饰品有限公司网站| 精品人妻少妇嫩草Av无码专区| 国产综合亚洲专区在线| 国产欧美日韩一区二区三区| 国产粉嫩呻吟一区二区三区| 关晓彤露内毛黑森林| 豆国产97在线 | 亚洲| 大香伊蕉人在播放2019| 成 人 黄 色 网站 S色| 把腿张开老子cao烂你在线视频 | 亚洲综合色区另类AV| 亚洲欧美一区二区成人片| 亚洲VS成人无码人在线观看堂| 亚洲444KKKK在线观看无码 | 日韩一区二区三区射精| 日本适合十八岁以上的护肤品| 人妻 偷拍 无码 中文字幕| 欧美最猛黑人xxxx黑人猛交| 欧美熟妇成人大片性爽| 欧美性XXXXX极品| 强奷漂亮雪白丰满少妇| 强壮公的侵犯让我高潮不断| 欧洲一卡2卡三卡4卡 乱码| 欧洲最猛黑人XXXⅩ猛男欧| 欧洲精品不卡1卡2卡三卡| 欧美午夜理伦三级在线观看| 欧美又粗又大XXXⅩBBBB| 欧洲精品VA无码一区二区三区| 国产一区二区三区不卡AV| 国产三级在线观看完整版| 国产亚洲精品A第一页 | 嘼皇PORONOⅤIDEOS极| 粉嫩AV一区二区三区免费观看| 疯狂做受XXXX欧美老人| 国产成人精品优优AV | 把腿张开老子臊烂你的漫画| 巴西BBABBABBABBA| 成人午夜视频精品一区| 国产AⅤ激情无码久久| 国产精品久久久久7777| 国产无遮挡无码视频免费软件| 国内精品久久久久久久COENT| 娇喘潮喷抽搐高潮在线观看视频 | 午夜精品久久久久久久久| 亚洲 欧美 中文 日韩AⅤ| 亚洲成A人V在线蜜臀| 亚洲精品一品区二品区三品区| 亚洲熟伦熟妇AV无码专区| 在线观看亚洲AV| 91人妻人人做人碰人人爽九色| MACBOOKPRO免费网站| 成人午夜精品无码区久久| 国产成人亚洲综合无码8 | 超薄肉色丝袜一二三四区|