2013-01-22 61 views
1

我搜索了,但沒有找到答案。在縮略圖後滾動網頁圖像

我有一個網站,以縮略圖格式顯示數百個圖像。我目前使用PHP以縮略圖顯示所有圖像,然後點擊縮略圖以全尺寸顯示圖像。

我想要做的是能夠點擊縮略圖並查看生成的全尺寸圖像,然後在那一點上能夠在全尺寸圖像中來回滾動,而不必返回到縮略圖。

作爲一個附加功能,當查看縮略圖時,我想只加載當前在客戶端頁面上顯示的內容......即,如果客戶端屏幕分辨率支持20,則只加載20,然後等待將剩下的部分加載到客戶端上,直到用戶向下滾動。這個用例中的主要客戶端是一個iphone。

在此先感謝!

回答

0

當您單擊圖像上,它應該指向包含全尺寸圖像的新的PHP文件,或甚至更好,加載它在一個新的<div>與PHP你可以得到客戶的決議與other tools

0

你實際上有兩個單獨的問題納秒。一種是顯示大拇指的大小,並能夠點擊下一張圖片。幾乎每個顯示圖像的插件都有這些選項。我個人使用fancybox,但挑選你喜歡的任何人。要啓用下一個/上一個按鈕,您需要將使用rel標記的圖像分組。

現在要加載每頁圖像,與谷歌類似,你需要通過javascript加載它。以下是你如何做到這一點的設置。這是未經測試的,因爲我手頭沒有圖庫。

在下面的代碼中,我將所有圖像一次加載到數組中,當您有很多圖像(如1000+)時,這並不完美。在這種情況下,您最好使用AJAX加載新頁面。但是,如果您的圖像數量較少,則速度會更快。

<script> 
//simple JS class to store thumn and fullimage url 
function MyImage(thumbnail, fullimage, imgtitle) { 
    this.thumb = thumbnail; 
    this.full = fullimage; 
    this.title = imgtitle; 
} 

//array that holds all the images 
var imagesArray = new Array(); 
var currentImage = 0; 

<?php 
//use php code to loop trough your images and store them in the array 
//query code to fetch images 
//each row like $row['thumb'] and $row['full'] and $row['title']; 
while ($row = mysqli_fetch_assoc($result)) 
{ 
    echo "imagesArray.push(new MyImage('".$row['thumb']."', '".$row['full']."', '".$row['title']."'));"; 
} 
?> 

//the thumb width is the width of the full container incl. padding 
//In this case I want to use 50x50 images and have 10px on the right and at the bottom. Which results in 60x60 
var thumbWidth = 60; 
var thumbHeight = 60; 

var screenWidth = $('body').width(); 
var screenHeight = $('body').height(); 

var maxImagesPerRow = Math.round(screenWidth/thumbWidth); 
var maxImagesPerCol = Math.round(screenHeight/thumbHeight); 
var totalImagesPerPage = maxImagesPerRow * maxImagesPerCol; 


//function to load a new page 
//assuming you use jquery 
function loadNextPage() { 
    var start = currentImage; 
    var end = currentImage + totalImagesPerPage; 
    if (end >= imagesArray.length) { 
    end = imagesArray.length - 1; 
    } 
    if (end<=start) 
    return; //last images loaded 

    $container = $('#thumbnailContainer'); //save to var for speed 
    $page = $('<div></div>'); //use a new container, not on stage, to prevent the dom for reloading everything on each iteration of the loop 
    for (start;start<=end;start++) { 
    //add a new thumbnail to the page 
    $page.append('<div style="margin:0;padding:0 10px 10px 0;"><a class="fancybox" rel="mygallery" href="'+imagesArray[start].full+'" title="'+imagesArray[start].title+'"><img src="'+imagesArray[start].thumb+'" alt="" /></a></div>'); 
    } 
    currentImage = start; 

    //when all images are added to the page, add the page to the container. 
    $container.append($page); 
} 

$(function() { 
    //when loading ready, load the first page 
    loadNextPage(); 
}); 

//function to check if we need to load a new page 
function checkScroll() { 
    var fromTop = $('body').scrollTop(); 
    //page with a 1-based index 
    var page = 1 + Math.round(fromTop/screenHeight); 

    var loadedImages = page*totalImagesPerPage; 

    if (loadedImages==currentImage) { 
    //we are scrolling the last loaded page 
    //load a new page 
    loadNextPage(); 
    } 
} 

window.onscroll = checkScroll; 

</script> 

<body> 
    <div id='thumbnailContainer'></div> 
</body>