Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to maintain page scroll position after a jquery event is carried out?

I have searched high and low for an answer and have found similar examples of the problem but the answers do not apply to my scenario. The reality is I am new to this and therefore I don't have the skills to adapt the answers I have found to my problem.

The problem:

I have a Div in which when a thumbnail is clicked the Div image replaces with another image via a JavaScript/jQuery script (I am not sure exactly maybe someone could clarify). This works fine however the problem is the page scrolls back to the top and the user then has to scroll back down to see the image after it has replaced itself.

I have looked online and have found that a return false: in the JavaScript may help however I have looked and return false is already present.

The other option I have looked at using is a JavaScript cookie based solution in which a cookie is sent, and the browser scroll position is maintain by reading the cookie however I cant seem to get that solution to work, I think the issue may be caused because I am hosting locally but I may be wrong...

The third is using a PHP script but I have not found a definitive answer on this method and it also means I am going to have to learn about PHP (something I'm sure I will have to learn in time anyway).

Here is the JavaScript:

<script type="text/javascript">   $(document).ready(function() {   $('.galleryicon').live("click", function() {      $('#mainImage').hide();     $('#cakebox').css('background-image', "url('ajax-loader.gif')");     var i = $('<img />').attr('src',this.href).load(function() {         $('#mainImage').attr('src', i.attr('src'));         $('#cakebox').css('background-image', 'none');         $('#mainImage').fadeIn();     });     return false;     });  });  </script> 

Here is the html:

<div class="cakecont">    <div id="cakebox">   <img src="../images/cakes/babycake1.png" alt="Main Image" id="mainImage"/>       <div class="pageinfo2">      <h3>Cake Type 1</h3>      <h6>£2.00</h6>      </div>      <div class="infobox">      <h6> Description </h6>      </div>         <div class="gallerybox">       <a href="../images/cakes/babycaketop.png" class="galleryicon">       <img src="../images/thumbs/babycaketopsml.png" alt="Thumbnail 2"/></a>        <a href="../images/cakes/babycake1.png" class="galleryicon">       <img src="../images/thumbs/babycakesml.png" alt="Image 1"/></a>    </div>   </div> </div> 

And here is a link to the working demo http://micahcarrick.com/code/jquery-image-swap/index.html

I have tried to resolve this on my own. This is the first question I have had to ask so far regarding the building of my website, all my learning and remedies to past problems have been served by Google, this one has eluded my search engine skills.

Below I have added all the html for the page in case there may be other script overriding the "new" modified JavaScript -

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org     /TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml"><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   <title>Cupcakes &amp; Cakes for Birthday/Wedding Gift in Bournemouth Dorset - SweetVision</title>    <meta name="keywords" content="cupcakes, cake, gift, wedding, birthday, Bournemouth, Dorset" />  <meta name="description" content="For the finest Cupcakes and Cakes in Bournemouth Dorset look no further, Sweetvision specialise in baked goods for Weddings, Birthdays, Baby Showers, Easter, Halloween, Christmas" />  <meta name="robots" content="ALL" />  <meta http-equiv= "Content-Language" content="en" />  <meta name="Publisher" content="Sweet Vision" />  <meta name="Copyright" content="Copyright 2012, Sweet Vision, All rights reserved." />  <meta name="Author" content="Mark Webb for Sweet Vision - www.sweetvision.co.uk" />    <link href="../images/homepage/favicon.ico" type="image/vnd.microsoft.icon" rel="shortcut icon" />    <link href="../root/css/sweetvision.css" rel="stylesheet" type="text/css" />    <script src="../js/jquery-1.4.2.min.js" type="text/javascript"></script>    <script type="text/javascript">   $(document).ready(function() {    $('.galleryicon').live("click", function(e) {  // the (e) represent the event $('#mainImage').hide();      $('#cakebox').css('background-image', "url('ajax-loader.gif')");      var i = $('<img />').attr('src',this.href).load(function() {            $('#mainImage').attr('src', i.attr('src'));            $('#cakebox').css('background-image', 'none');            $('#mainImage').fadeIn();       });  e.preventDefault(); //Prevent default click action which is causing the   return false;       //page to scroll back to the top  });   });   </script>  <script src="../js/s3Slider.js" type="text/javascript"></script>    <script type="text/javascript">   $(document).ready(function() {  $('#s3slider').s3Slider({   timeOut: 4000   }); });    </script>    <script src="../js/SpryMenuBar.js" type="text/javascript"></script>   <link href="../root/css/SpryMenuBarHorizontal.css" rel="stylesheet" type="text/css" />    </head>     <body>      <div class="container">    <div class="sprybox">    <ul id="check_menu" class="MenuBarHorizontal">     <li><a href="../root/index.html">Home</a></li>     <li><a href="../root/aboutus.html" class="MenuBarItemSubmenu">About Us</a>       <ul>         <li><a href="../root/contactus.html">Contact</a></li>         <li><a href="../root/news.html">News</a></li>         <li><a href="../root/events.html">Events</a></li>       </ul>     </li>        <li><a href="../root/ourmenu.html">Our Menu</a></li>          <li><a href="gallery.html">Gallery</a></li>           </ul>         <div class="mainmenu">            <a href="../root/mainmenu.html">            <img src="../images/buttons/mainmenu.png" />            </a>        </div>         <div class="backbutton">         <a href="javascript:history.go(-1)">          <img src="../images/buttons/Backbutton.png" /></a>       </div>      </div>  <!-- end.header --><!--end of sprybox -->    <!--end div element -->    <!-- thumbnails are links to the full size image -->    <div class="cakecont">   <div id="cakebox">    <img src="../images/cakes/babycake1.png" alt="Main Image" id="mainImage"/>       <div class="pageinfo2">      <h3>Cake Type 1</h3>      <h6>£2.00</h6>      </div>      <div class="infobox">      <h6> Description </h6>      </div>    <div class="gallerybox">       <a href="../images/cakes/babycaketop.png" class="galleryicon">       <img src="../images/thumbs/babycaketopsml.png" alt="Thumbnail 2"/></a>        <a href="../images/cakes/babycake1.png" class="galleryicon">       <img src="../images/thumbs/babycakesml.png" alt="Image 1"/></a>   </div>   </div> </div>     <div class="footer">   <p>Copyright &copy; 2012 by Mark Webb. All rights reserved.</p>  </div> <!-- end .footer -->  </div> <!-- end .container -->    <script type="text/javascript">  var MenuBar1 = new Spry.Widget.MenuBar("check_menu",{imgDown:"SpryAssets/SpryMenuBarDownHover.gif",   imgRight:"SpryAssets/SpryMenuBarRightHover.gif"});   </script>   <script type="text/javascript">    var _gaq = _gaq || [];  _gaq.push(['_setAccount', 'UA-29457683-1']);   _gaq.push(['_trackPageview']);     (function() {   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') +    '.google-analytics.com/ga.js';   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);   })();   </script>    </body> </html> 
like image 286
marky Avatar asked May 31 '12 15:05

marky


People also ask

Which jQuery method is used to return the position of a vertical scrollbar?

jQuery scrollTop() Method The scrollTop() method sets or returns the vertical scrollbar position for the selected elements.

How can check scroll end in jQuery?

scrollTop() + $(window). height() == $(document). height()) { alert("bottom!"); } }); You can test it here, this takes the top scroll of the window, so how much it's scrolled down, adds the height of the visible window and checks if that equals the height of the overall content ( document ).

How get scroll top in jQuery?

To set scrolltop position in jQuery, use the scrollTop() method. The scrollTop( ) method gets the scroll top offset of the first matched element. This method works for both visible and hidden elements.


1 Answers

You can save the current scroll amount and then set it later:

var tempScrollTop = $(window).scrollTop();  ..//Your code  $(window).scrollTop(tempScrollTop); 
like image 56
Briguy37 Avatar answered Sep 18 '22 15:09

Briguy37