摘要:俗話說的好,不愛美女的程序員不是一個好司機妹子圖煎蛋這幾天一直在菜鳥教程學(xué)習(xí)和,想總結(jié)一下自己的學(xué)習(xí)成果,這個圖片站也就這么自然而然地出來了,主要使用了圖片瀑布流加載數(shù)據(jù),頁面靜態(tài)化圖片分頁等方法進行實現(xiàn)圖片瀑布流我這里分為兩種瀑布流方法,
俗話說的好,不愛美女的程序員不是一個好司機!
mm:http://mm.luckyw.cn/
妹子圖:http://mzt.luckyw.cn/
煎蛋:http://jd.luckyw.cn/
這幾天一直在菜鳥教程學(xué)習(xí)php和mysql,想總結(jié)一下自己的學(xué)習(xí)成果,so這個mm圖片站也就這么自然而然地出來了,主要使用了圖片瀑布流、ajax加載數(shù)據(jù),php頁面靜態(tài)化、圖片分頁等方法進行實現(xiàn)
圖片瀑布流我這里分為兩種瀑布流方法,第一種方式(首頁靜態(tài)化頁面index.html):
先獲取所有的圖片盒子boxes,每個圖片盒子的寬度box_w,文檔的寬度W,從而得到列數(shù)num,然后設(shè)置容器$("#imgBox")的寬度為列數(shù) × 每個圖片盒子的寬度。然后定義一個數(shù)組arr存儲每列的高度,對所有圖片盒子進行遍歷,如果此時索引小于列數(shù),則把這個圖片盒子的高度添加到盒子中,如果此時索引大于列數(shù),那么先獲取數(shù)組arr中高度最短minH的那一列的索引minIndex,然后定義圖片盒子在容器中的位置,因為我的容器imgBox已經(jīng)定義了position:relative,設(shè)置圖片盒子為position:absolute則相對于容器進行絕對定位,并設(shè)置圖片盒子的left和top值,之后再把數(shù)組中最低高度那一列的值加上這個圖片盒子的高度,此時即實現(xiàn)了圖片瀑布流效果,隨頁面滾動觸發(fā)ajax加載數(shù)據(jù),之后一個一個把圖片盒子添加到容器中去
function waterfall() { var boxes = $(".box"); var box_w = boxes.eq(0).outerWidth(true); var W = document.body.clientWidth || document.documentElement.clientWidth; var num = Math.floor(W / box_w); //5 $("#imgBox").width(num * box_w); $(".w").width(num * box_w); var arr = []; boxes.each(function(index, ele) { var h = $(ele).outerHeight(true); if (index < num) { arr.push(h); } else { var minH = Math.min.apply(null, arr); var minIndex = getMinIndex(arr, minH); $(ele).css({ "position": "absolute", "left": box_w * minIndex, "top": minH }); arr[minIndex] += h; } }); } function getMinIndex(arr, h) { for (var i in arr) { if (arr[i] == h) { return i; } } }
第二種方式(圖片分頁):
基本和上面差不多,也是獲取所有的圖片盒子boxes,每個圖片盒子的寬度box_w,文檔的寬度W,從而得到列數(shù)num,然后設(shè)置容器$("#imgBox")的寬度為列數(shù) × 每個圖片盒子的寬度。不過不同的是,我這里采用定義num個列div盒子,設(shè)置它的寬為圖片盒子的寬度box_w,display為inline-block,然后添加到容器中去,之后把所有的圖片盒子從dom中刪去然后一個一個地追加到最短的那一列中去
我這里是采用python從網(wǎng)上抓取圖片鏈接,然后保存到mysql數(shù)據(jù)庫中,然后設(shè)計一個接口訪問這些數(shù)據(jù),接口鏈接:http://luckyw.cn/api/load_img...
當(dāng)頁面滾動時觸發(fā)ajax加載數(shù)據(jù)的方法,此時ajax通過接口請求數(shù)據(jù),然后把一個一個的圖片盒子添加到容器中去,再應(yīng)用圖片瀑布流即達到了瀑布流加載圖片的效果,ajax請求圖片數(shù)據(jù)的代碼如下:
/** * ajax請求圖片數(shù)據(jù) * @param s:開始位置 * @param n:每頁數(shù) */ function ajax(s, n) { $.ajax({ url: "http://luckyw.cn/api/load_img.php?start=" + s + "&num=" + n, method: "GET", dataType: "json", success: function(data) { var imgs = data.list; for (var i in imgs) { var box = $("").addClass("box"); var a = $("").attr({ "href": imgs[i]["src"], "target": "_blank" }).addClass("item"); var img = $("").attr("src", imgs[i]["src"]); a.append(img); box.append(a); $("#imgBox").append(box); } start += num; loading = false; waterfall(); }, error: function(err) { if (err) console.log(err); } }); } php頁面靜態(tài)化
這里我只簡單說下原理:是利用了php的緩存機制output_buffering,然后把使用file_put_contents把緩存寫到文件中去,從而實現(xiàn)頁面靜態(tài)化,關(guān)鍵代碼如下:
//index.php文件 ob_start();//如果`php.ini`沒有打開緩存,這里打開緩存 require_once ("temp.php"); //加載模板文件 if(file_put_contents("index.html",ob_get_clean())){//把緩存寫入到文件中并清空緩存 header("location: index.html");//這里是實現(xiàn)頁面跳轉(zhuǎn)到靜態(tài)文件 }else{ echo "error"; }之后我們每次訪問index.php文件就會生成并跳轉(zhuǎn)到index.html靜態(tài)化文件了
圖片分頁
這里基本和接口差不多類似,接口是返回數(shù)據(jù),而這里是根據(jù)url地址后面所跟的參數(shù)查找到數(shù)據(jù),并把數(shù)據(jù)用盒子包裝起來直接添加到容器中去,關(guān)鍵的是分頁的實現(xiàn),理清邏輯很好理解,在此我就不詳述了,簡單看下代碼:
$start = 1; $end = $totalPage; $showPageNum = 5; $pageOffset = ($showPageNum-1)/2; $page_navigation = ""; if($page>1){ $page_navigation.="首頁"; $page_navigation.="<上一頁"; } if($totalPage>$showPageNum){ if($page>$pageOffset+1){ $page_navigation .= "..."; } if($page>$pageOffset){ $start = $page-$pageOffset; $end = $totalPage>$page+$pageOffset?$page+$pageOffset:$totalPage; }else{ $start = 1; $end = $showPageNum; } if($page+$pageOffset>$totalPage){ $start = $start - ($page+$pageOffset-$end); } } for($i=$start;$i<=$end;$i++){ if($i==$page){ $page_navigation.="$i"; }else{ $page_navigation.="$i"; } } if($totalPage>$showPageNum&&$totalPage>$page+$pageOffset){ $page_navigation.="..."; } if($page<$totalPage){ $page_navigation.="下一頁>"; $page_navigation.="尾頁"; } $page_navigation.="共有{$totalPage}頁";文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22042.html
摘要:是一種典型的面向?qū)ο缶幊陶Z言。這篇文章主要是來初步理解一下面向?qū)ο蟮乃季S為下面的內(nèi)容先給一個基礎(chǔ)。針對面向?qū)ο缶幊痰母鄡?nèi)容,會在后面的文章里面詳細(xì)解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向?qū)ο缶幊汤病? showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...
摘要:包裹性所謂包裹性,其實是由包裹和自適應(yīng)兩部分組成。官方對屬性的解釋是元素盒子的邊不能和前面的浮動元素相鄰。清除高度塌陷的問題在上面的章節(jié)中,如果子元素設(shè)置浮動屬性,則父元素就會出現(xiàn)高度塌陷的問題。 float屬性是CSS中常用的一個屬性,在實際工作中使用的非常多,如果使用不當(dāng)就會出現(xiàn)意料之外的效果。雖然很多人說浮動會用就行、浮動過時了,但是對于優(yōu)秀的前端開發(fā)人員,需要有刨根問底的精神,...
摘要:今天筆者就介紹一個不用編程就能訓(xùn)練出深度學(xué)習(xí)定制模型的方法。答案是,是本人開發(fā)的,自認(rèn)為做得比百度好,關(guān)鍵是從入庫到訓(xùn)練,識別,完全不用編程。。。 近年來基于深度學(xué)習(xí)的人工智能非常火。提起人工智能都覺得是高大上,好像離普通人很遠(yuǎn),更別說訓(xùn)練出定制模型了。唔,不知道什么是模型,為什么要定制?好吧,你可以想象模型就是一個人, 剛開始啥也不懂,使用教材(或者說樣本)教他,他就能學(xué)會識別不同的...
閱讀 1580·2021-11-23 10:01
閱讀 2974·2021-11-19 09:40
閱讀 3220·2021-10-18 13:24
閱讀 3471·2019-08-29 14:20
閱讀 2985·2019-08-26 13:39
閱讀 1280·2019-08-26 11:56
閱讀 2669·2019-08-23 18:03
閱讀 379·2019-08-23 15:35