0

I have a horizontal image gallery, the images for which is populated from a thumbnail folder. I want to create a utility where the clicked image always remain at the middle of the thumbnail image palette. Similar to the question asked here.

A minimal version of the code is as follows:

HTML

<!DOCTYPE html>
<html>
<head>
  <style>

  #loaded_img_panel {
    border-top: solid 0.3em #f1ded9;
    display:flex;
    flex-wrap: nowrap;
    overflow-x:auto;
    padding: 10px 0 0 0;
  }

  #loaded_img_panel > ul > li {
    list-style: none;
  }

  #loaded_img_panel ul li img {
    display: inline;
    width: 210px;
    height:175px;
    cursor: pointer;
  }

  #loaded_img_panel   img.active{
      border: 0.4em solid red;
      padding : 5px;
  }

  #loaded_img_panel > caption {
      display:block;
  }

  #loaded_img_panel img:hover {
      opacity: 0.5;
  }

  </style>
</head>

<body>
   <div class="book-list-headbox">
       <div class="page-number-box">
           <label for="" id="total-page" value="" class="mb-0"></label>
           <span class="separator">of</span>
           <input type="text" id="current-page" value="1">
       </div>
   </div>

  <div class="loaded_img_panel" id="loaded_img_panel">  
  </div>

</body>
</html>

<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  <script>

  window.addEventListener('load', function(e) {
    var matchLst = "thumb";
    var project = "upload";

  if (matchLst !== null && matchLst !=="") {
    $.post("loadimages.php", { 'project' : project,'matchLst' : matchLst }, function(output){
      $("#loaded_img_panel").html(output).show();
      });
  }
  })

  $(function(){
    $('#gotoframe').change(function() {
      var i = $(this).val() -1;
      activeBook(i);
      localStorage.setItem('clicki', i);
    });

    $('#loaded_img_panel').on('click', 'img', function() {
      activeBook($(this).index());
    });

    function activeBook(i){
      $('#loaded_img_panel img').removeClass('active');
      var active = $('#loaded_img_panel img').eq(i).addClass('active');
      var left = active.position().left;  
      console.log("firstleft: " + left);
      var currScroll= $(".loaded_img_panel").scrollLeft(); 
      var contWidth = $('.loaded_img_panel').width()/2; 
      var activeOuterWidth = active.outerWidth()/2; 
      left= left + currScroll - contWidth + activeOuterWidth;
      $('.loaded_img_panel').animate( { 
        scrollLeft: left
      },'slow');
    }
  });
</script>

loadimages.php

<?php
session_start();

$project = $_POST['project'];
$match = $_POST['matchLst'];
$_SESSION['matchLst'] = $match;

$tardir = "projects/" . $project . "/" . $match . "/thumb/*.jpg" ;
$imgdir = "projects/" . $project . "/" . $match . "/" ;
$files = glob($tardir);

for ($i=0; $i<count($files); $i++)
{
    $num = $files[$i];
    $filname = basename($num, ".jpg");
    $imgname = basename($num);
    $img = $imgdir . $imgname;
    $filnam = substr($filname, -5);
    $filnam = rtrim($filnam);
    echo '<ul class="item" id="item">';
    echo '<li class="book"><img src="'.$img.'" id="thumbNails'.$filnam.'"/>';
    echo '<figcaption class="caption" name="caption">' . $filnam . '</figcaption>';
    echo '</li></ul>';
}

?>

The php code renders the images from the folder. When I click on the image from the gallery, instead of providing the position of the image, I get static values till I use the scroll bar to select some of the images that were not visible onload. Those clicks returns the position values in negative. What I am trying to do is given as an example here.

Apricot
  • 2,925
  • 5
  • 42
  • 88
  • can you provide screenshot of what's happening ? Difficult with php .. Also there's answers given to the questions you've highlighted.. did you try those solutions? – Rachel Gallen Sep 23 '18 at 13:43
  • @RachelGallen Yes...I did try those solutions...there is no problem with php as it renders the images correctly....the problem is even if I click 100th or 200th image...instead of getting centered, the scroll bar reaches back to image 1. – Apricot Sep 23 '18 at 14:01

0 Answers0