2012-05-31 6 views
35

मैंने उत्तर के लिए उच्च और निम्न खोज की है और समस्या के समान उदाहरण पाए हैं लेकिन उत्तर मेरे परिदृश्य पर लागू नहीं होते हैं। हकीकत यह है कि मैं इसके लिए नया हूं और इसलिए मेरे पास मेरी समस्या के जवाबों को अनुकूलित करने के लिए कौशल नहीं है।एक jquery घटना के बाद पृष्ठ स्क्रॉल स्थिति को बनाए रखने के लिए कैसे किया जाता है?

समस्या:

मैं एक डिव जिसमें जब एक थंबनेल क्लिक किया जाता है डिव छवि एक जावास्क्रिप्ट/jQuery स्क्रिप्ट के माध्यम से एक और छवि के साथ की जगह है (मुझे यकीन है कि वास्तव में हो सकता है किसी को स्पष्ट कर सकते नहीं कर रहा हूँ)। यह ठीक काम करता है हालांकि समस्या यह है कि पेज शीर्ष पर वापस स्क्रॉल करता है और उपयोगकर्ता को इसे बदलने के बाद छवि को देखने के लिए नीचे स्क्रॉल करना पड़ता है।

मैं ऑनलाइन देखा है और पाया है कि एक वापसी झूठी: जावास्क्रिप्ट में हालांकि मैं ध्यान दिया है मदद और वापसी झूठी पहले से मौजूद है हो सकता है।

मैं जिस अन्य विकल्प का उपयोग कर रहा हूं वह एक जावास्क्रिप्ट कुकी आधारित समाधान है जिसमें एक कुकी भेजी जाती है, और ब्राउजर स्क्रॉल स्थिति कुकी पढ़ने से बनाए रखती है, हालांकि मुझे लगता है कि काम करने के लिए मुझे यह समाधान नहीं मिल रहा है, मुझे लगता है कि समस्या का कारण हो सकता है क्योंकि मैं स्थानीय रूप से होस्ट कर रहा हूं लेकिन मैं गलत हो सकता हूं ...

तीसरा एक PHP स्क्रिप्ट का उपयोग कर रहा है लेकिन मुझे इस विधि पर एक निश्चित उत्तर नहीं मिला है और इसका भी अर्थ है कि मुझे सीखना होगा PHP के बारे में (मुझे यकीन है कि मुझे वैसे भी समय में सीखना होगा)।

यहाँ जावास्क्रिप्ट है:

<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> 

यहाँ एचटीएमएल है:

<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> 

और यहाँ काम कर डेमो http://micahcarrick.com/code/jquery-image-swap/index.html

मैं पर इस को हल करने की कोशिश की है के लिए एक लिंक है मेरी खुद। यह मेरी पहली वेबसाइट है कि मुझे अपनी वेबसाइट के निर्माण के बारे में अभी तक पूछना है, मेरी सारी शिक्षा और पिछले समस्याओं के उपचार Google द्वारा परोसे गए हैं, इसने मेरे खोज इंजन कौशल को दूर किया है।

नीचे मैं मामले में पृष्ठ के लिए सभी एचटीएमएल जोड़ लिया है अन्य स्क्रिप्ट 'नई' संशोधित जावास्क्रिप्ट अधिभावी भी हो सकते हैं -

<!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> 
+0

जब मैं पृष्ठ पर जाएँ, मैं किसी भी स्क्रॉल बार नहीं दिख रहा। पूरा पृष्ठ स्क्रीन पर फिट बैठता है। क्या आप एक छोटे संकल्प का उपयोग कर रहे हैं? – kevin628

+0

हाँ मैं लैपटॉप पर हूं इसलिए मुझे स्क्रॉलिंग प्रभाव मिलता है, धन्यवाद। – marky

उत्तर

53

आप वर्तमान पुस्तक राशि बचा सकते हैं और फिर इसे बाद में सेट:

var tempScrollTop = $(window).scrollTop(); 

..//Your code 

$(window).scrollTop(tempScrollTop); 
+0

आपके उत्तर के लिए धन्यवाद लेकिन मुझे यकीन है कि मैं आपके कोड को कहां कार्यान्वित करता हूं, मेरे पास बहुत कम है जावास्क्रिप्ट का कोई ज्ञान नहीं। – marky

+0

@ user1428659: प्रत्येक क्लिक के लिए, आप कुछ भी करने से पहले स्क्रॉल स्थान को सहेजना चाहते हैं, और फिर सबकुछ समाप्त होने के बाद इसे पुनर्स्थापित करना चाहते हैं। इस प्रकार, आप अपने क्लिक फ़ंक्शन की शुरुआत में पहली पंक्ति डाल देंगे और इसके अंत में अंतिम पंक्ति (वापसी विवरण से पहले)। – Briguy37

+0

@ user1428659: हम्म, मैंने अभी आपके कोड को फिर से देखा है और यह काम नहीं कर सकता क्योंकि ऐसा लगता है कि यह असीमित हो सकता है (फेडइन को पुनर्स्थापित स्क्रॉल से पहले नहीं कहा जाता है)। इस प्रकार, यदि यह आपके लिए काम नहीं करता है, तो fadeIn() के बाद दूसरी पंक्ति डालें। एक और नोट पर, यदि आप छवियों की ऊंचाई को जानते हैं, तो आप छवि टैग को उस ऊंचाई के रिक्त div में लपेट सकते हैं जो इसे स्क्रॉलिंग से शुरू करने के लिए हमेशा प्रदर्शित करता है। – Briguy37

4

क्या आप क्या करना चाहते क्लिक करें घटना की डिफ़ॉल्ट गतिविधि को रोकता है । तो, आप एक "ई" है कि रेखा $('.galleryicon').live("click", function(e) { में घटना का प्रतिनिधित्व करता है जोड़ रहे हैं और आप लाइन e.preventDefault();

+0

आपके उत्तर के लिए धन्यवाद, हालांकि कहा गया है कि कोड अभी भी पृष्ठ को शीर्ष पर कूदने का कारण बनता है - मुझे आश्चर्य है कि कुछ और स्क्रिप्ट को ओवरराइड कर रहा है या नहीं। डेमो साइट जो एक ही कोड का उपयोग करती है, वही प्रभाव डालती है। यदि आप पृष्ठ को स्क्रॉल करते हैं और फिर थंबनेल पर क्लिक करते हैं तो पृष्ठ शीर्ष पर वापस आता है ... धन्यवाद। – marky

+0

मैंने कम से कम समय के लिए इस मुद्दे को ठीक किया है। E.preventDefault() को डालने के बाद मैंने देखा कि पृष्ठ स्वचालित रूप से थंबनेल div के निचले किनारे पर जा रहा था। इस मुद्दे को हल करने के लिए मैंने कुछ हास्यास्पद (400 पीएक्स) पर थंबनेल युक्त divs की ऊंचाई बढ़ा दी और अब प्रत्येक अंगूठे पर क्लिक होने पर पृष्ठ स्क्रॉल नहीं होता है, यह क्यों काम करेगा? – marky

5
जोड़ रहे हैं

$(document).ready(function() { 
    $('.galleryicon').live("click", function(e) { 

    $('#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; 
    e.preventDefault(); 
    }); 
}); 

: ऐसा करने के लिए, तो आप इस तरह अपने स्क्रिप्ट को संशोधित करने की आवश्यकता होगी

डिफ़ॉल्ट व्यवहार event.preventDefault पर वापस पेज

$(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 
    }); 
}); 

के शीर्ष पर स्क्रॉल करके अधिक जानकारी के लिए() को रोकने के लिए नीचे दिए गए कोड का प्रयास करें आधिकारिक दस्तावेज पर एक नज़र here है।

+0

आपके उत्तरों के लिए बहुत धन्यवाद मैंने कोड को लागू किया है लेकिन यह अभी भी पृष्ठ के शीर्ष पर कूदता है, मुझे आश्चर्य है कि क्या एक और स्क्रिप्ट इसे ओवरराइड कर रही है। – marky

+0

मैंने अभी एक टेस्ट पेज बनाया है और आपका समाधान तब तक काम करता प्रतीत होता है जब तक स्क्रॉल बार पृष्ठ के निचले हिस्से में नहीं होता है (यानी आप कोई सामग्री नहीं होने पर आगे स्क्रॉल नहीं कर सकते) – marky

+0

हिट रिटर्न खोलता है - हालांकि यदि स्क्रॉल बार नीचे पृष्ठ 1 सेमी ऊपर कूदता है। अब मैंने पेज पर एक 400 पीएक्स उच्च पाद लेख जोड़ने की कोशिश की है, एक बार जब थंबनेल क्लिक किया जाता है तो पृष्ठ 1 सेमी आइश पर कूदता है, लेकिन जब तक स्क्रॉल न करें और एक और अंगूठे पर क्लिक करें, तो पृष्ठ स्थैतिक रहता है। हालांकि यदि आप फिर से स्क्रॉल करते हैं तो एक अंगूठे को दबाएं, यदि आप ऊपर या नीचे स्क्रॉल करते हैं तो पृष्ठ ऊपर या नीचे कूदता है - wierd। आपकी सहायता के लिए धन्यवाद – marky

30

सब जो गूगल से यहाँ आया और घटना फायरिंग के लिए एक एंकर तत्व का उपयोग कर रहे हैं, वैसे ही क्लिक शून्य करना सुनिश्चित करें :

<a 
href='javascript:void(0)' 
onclick='javascript:whatever causing the page to scroll to the top' 
></a> 
+2

बहुत बहुत धन्यवाद, मैं $ ('फॉर्म') पर स्क्रॉल को रोकने की कोशिश कर रहा हूं। सबमिट करें (फ़ंक्शन {}); e.preventDefault() के साथ; और अगर मैं $ (विंडो) .scrollTop (tempScrollTop) डालता हूं; वापसी से पहले, या यहां तक ​​कि अगर मैंने इसे वापस कर दिया, तो भी यह शीर्ष पर वापस चला गया। यह मेरे लिए काम किया। – KacieHouser

+1

@Akeel मुझे लगता है कि href = "#" जैसे कुछ का उपयोग करके ब्राउज़र पर डिफ़ॉल्ट कार्रवाई को शीर्ष पर स्क्रॉल करने के लिए लागू किया जाता है (http ..../# पर रीडायरेक्ट करना। नासर अल-वोहाइबी ने सुझाव दिया या कुछ भी अपने हैंडलर में ईवेंट पर आपकी क्लिक हैंडलर के तल पर और href अभ्यस्त का पालन किया जाना -Call preventDefault; की तरह इस अवास्तविक लौटाते रखो:। समारोह (ई) { e.preventDefault(); // आपका इवेंट हैंडलिंग कोड } आप ब्राउज़र को डिफ़ॉल्ट कार्रवाई नहीं करने के लिए मजबूर करते हैं –

2

मुझे div सामग्री प्राप्त करने के बाद काम करने के लिए स्क्रॉल करने के लिए समान समस्या थी। प्रत्येक बार नीचे दी गई प्रक्रिया को चलाने के दौरान सामग्री शीर्ष पर स्क्रॉल की गई थी। मैंने पाया कि नई स्क्रॉलटॉप सेट करने से पहले थोड़ा विलंब इस मुद्दे को हल करता है।

यह wdCalendar से कट जाता है, जहां मैं इस प्रक्रिया संशोधित:

function BuildDaysAndWeekView(startday, l, events, config) 
    .... 
     var scrollpos = $("#dvtec").scrollTop(); 
     gridcontainer.html(html.join("")); 
     setTimeout(function() { 
      $("#dvtec").scrollTop(scrollpos); 
     }, 25); 
    .... 
देरी के बिना

, यह बस काम नहीं किया।

0

स्क्रॉल स्थिति सेट करते समय ध्यान देने योग्य कुछ, सुनिश्चित करें कि आप इसे सही दायरे में करते हैं। उदाहरण के लिए, यदि आप एकाधिक कार्यों में स्क्रॉल स्थिति का उपयोग कर रहे हैं, तो आप इसे इन कार्यों के बाहर सेट करना चाहते हैं।

$(document).ready(function() { 
    var tempScrollTop = $(window).scrollTop(); 
    function example() { 
     console.log(tempScrollTop); 
    }; 

}); 
0
$('html,body').animate({ 
    scrollTop: $('#answer-<%= @answer.id %>').offset().top - 50 
}, 700); 
+1

स्टैक ओवरफ़्लो में आपका स्वागत है! जबकि यह कोड स्निपेट समाधान हो सकता है, [स्पष्टीकरण सहित] (// meta.stackexchange.com/questions/ 114,762/explainin जी-पूरी तरह से कोड-आधारित-उत्तर) वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। – yivi

संबंधित मुद्दे