Web Widget - A Basic Image Slider Gallery

關於圖片的slider滑動,蠻多網頁會有應用到,且網路上有很多人撰寫了炫麗的image slider,

還寫成plugin來供大家下載使用。這個功能可以讓我們在很多小圖片中選取要顯示的圖片

,而這些圖片的選取方式,可以利用點選向右的button or 向左的button來顯示出目前可選取

的小圖片。因此在出於好奇心的情況下,自己也製作了一個簡單的image slider,以備不時

之需,說不會有派上用場的時候,又或者先想想這個概念大概可以怎麼實作!

首先,我們要配置圖片顯示的部分及要捲動的顯示區域,如下圖:


以上圖片來源為Window 7 (我的圖片),以此程式作為示範之用

HTML程式碼如下:
  1. <div style="margin:15px 0px 0px 35px; width:512px; height:384px">
  2. <img src="images/ajax-loader.gif" id="load_img_wait">
  3. <img id="img_display">
  4. </div>
  5. <div style="margin-top:10px;margin-left:30px;width:612px; position: relative;">
  6. <div class="back_btn"></div>
  7. <div style="padding:5px; width:507px; height:75px; overflow:hidden">
  8. <ul class="img_list">
  9. <li><img src="images/thumbnail_Hydrangeas.jpg"></li>
  10. <li><img src="images/thumbnail_Jellyfish.jpg"></li>
  11. <li><img src="images/thumbnail_Koala.jpg"></li>
  12. <li><img src="images/thumbnail_Tulips.jpg"></li>
  13. <li><img src="images/thumbnail_Desert.jpg"></li>
  14. <li><img src="images/thumbnail_Chrysanthemum.jpg"></li>
  15. <li><img src="images/thumbnail_Penguins.jpg"></li>
  16. <li><img src="images/thumbnail_Lighthouse.jpg"></li>
  17. </ul>
  18. </div>
  19. <div class="forward_btn"></div>
  20. </div>

img_display的區塊為顯示大圖的區域,下一個區塊為顯示捲動小圖的區域。小圖與大圖為

分開的,請注意!<ul>上一層包附的div,設定為當ul的width大於它時,其餘的圖片會隱藏

起來(overflow:hidden)。

CSS語法如下:
  1. *{
  2. margin:0;
  3. padding:0;
  4. }
  5. li{
  6. display: list-item;
  7. float: left;
  8. margin-right:5px;
  9. }
  10. .back_btn{
  11. cursor: pointer;
  12. width: 13px;
  13. left:-20px;
  14. height: 100px;
  15. position: absolute;
  16. top: 10px;
  17. z-index: 10;
  18. background: url(images/scroll_back.png) 0px 22px no-repeat;;
  19. }
  20. .forward_btn{
  21. cursor: pointer;
  22. right: 80px;
  23. width: 13px;
  24. height: 100px;
  25. position: absolute;
  26. top: 10px;
  27. z-index: 10;
  28. background: url(images/scroll_forward.png) 0px 22px no-repeat;;
  29. }
  30. .img_list{
  31. position: relative;
  32. right:0px;
  33. float: left;
  34. list-style: none;
  35. }
  36. .img_list li img{
  37. border: 1px solid #A52A2A;
  38. cursor:pointer;
  39. opacity: 0.5;
  40. }
  41. .img_list li img:hover{
  42. opacity: 1;
  43. }
  44. #load_img_wait{
  45. position:absolute;
  46. top:200px; left:280px;
  47. display:none;
  48. }

請注意,img_list right:0px的部分,當點選向右捲動時,透過right的設定,讓整個ul相對的

向左移動,以此隱藏的圖示可以顯示出來!

JavaScript 語法如下:
第一部分為,html載入後的處理與圖示載入後的處理
  1. var li_width = 0;
  2. var li_width_display = 512;
  3. var img_display_obj = new Image();
  4. $(document).ready(function(){
  5. img_display_obj.src = "images/Hydrangeas.jpg";
  6. window.onload = function(){
  7. li_len = $(".img_list").find("li").length;
  8. li_width = (li_len*(105+2));
  9. $(".img_list").css("width", (li_width)+"px");
  10. }
  11. img_display_obj.onload = loadimage;
  12. };
  13. });

html載入完成時,設定<ul>的width;而預設圖片的第一張圖,並且將它的屬性assign給

<img id="img_display">。

關於點選的button語法如下:
  1. var animate_auto;
  2. $(".forward_btn").click(function(){
  3. li_right = parseInt($(".img_list").css("right"));
  4. if((li_width - li_width_display) <= li_right){
  5. return false;
  6. }
  7. li_right_m = 0;
  8. animate_timer = setInterval(function(){
  9. li_right_m = li_right_m + 30;
  10. li_right = li_right + 30;
  11. if(li_right >= (li_width - li_width_display)){
  12. li_right = (li_width - li_width_display);
  13. }
  14. $(".img_list").css("right", li_right+"px");
  15. if(li_right != 0 && (li_right_m % 105 == 0 || li_right == (li_width - li_width_display))){
  16. clearInterval(animate_timer);
  17. }
  18. }, 20);
  19. }).mouseenter(function(){
  20. li_right = parseInt($(".img_list").css("right"));
  21. if(li_right == (li_width - li_width_display)){
  22. return false;
  23. }
  24. animate_auto = setInterval(function(){
  25. li_right = li_right + 5;
  26. if(li_right >= (li_width - li_width_display)){
  27. li_right = (li_width - li_width_display);
  28. }
  29. $(".img_list").css("right", li_right+"px");
  30. if(li_right == (li_width - li_width_display)){
  31. clearInterval(animate_auto);
  32. }
  33. }, 50);
  34. }).mouseleave(function(){
  35. clearInterval(animate_auto);
  36. });
  37. $(".back_btn").click(function(){
  38. li_right = parseInt($(".img_list").css("right"));
  39. if(li_right <= 0){
  40. return false;
  41. }
  42. animate_timer = setInterval(function(){
  43. li_right_m = li_right_m + 30;
  44. li_right = li_right - 30;
  45. if(li_right <= 0){
  46. li_right = 0;
  47. }
  48. $(".img_list").css("right", li_right+"px");
  49. if(li_right_m % 105 == 0 || li_right == 0){
  50. clearInterval(animate_timer);
  51. }
  52. }, 20);
  53. }).mouseenter(function(){
  54. li_right = parseInt($(".img_list").css("right"));
  55. if(li_right == 0){
  56. return false;
  57. }
  58. animate_auto = setInterval(function(){
  59. li_right = li_right - 5;
  60. if(li_right <= 0){
  61. li_right = 0;
  62. }
  63. $(".img_list").css("right", li_right+"px");
  64. if(li_right == 0){
  65. clearInterval(animate_auto);
  66. }
  67. }, 50);
  68. }).mouseleave(function(){
  69. clearInterval(animate_auto);
  70. });
  71. $(".img_list li img").click(function(){
  72. $("#img_display").hide();
  73. $("#load_img_wait").show();
  74. img_display_obj.src = ($(this).attr("src")).replace("thumbnail_", "");
  75. img_display_obj.onload = loadimage;
  76. });
  77. function loadimage(){
  78. $("#load_img_wait").hide();
  79. $("#img_display").attr({
  80. "src" : img_display_obj.src,
  81. "width" : img_display_obj.width/2,
  82. "hwight" : img_display_obj.height/2
  83. });
  84. $("#img_display").show();
  85. }

這個部分主要分成當滑鼠移至button上方時,ul會自動向左移動(right > 0),至於在時間內

要位移多少可自行設定如何比較順!而點選按鈕的部分,我是設定一次移兩張圖的width,

至於重點的部分為判斷如何停止位移囉!

而back的部分跟forward的部分類似,相對的就是判斷li_right <= 0時,即停止,並且設其為

li_right = 0;,這部分不另外提到了!

PS.  圖片都是找同樣的大小來做示範,所以若圖片都不一樣,可能會有問題

最後,這個陽春版的image slider是可以work,但很單調XD,但重點是概念上希望多少是

有學到一些東西囉!

留言