يمكنني تحديث window.location.hash دون الحاجة التمرير صفحة على شبكة الإنترنت؟
-
22-07-2019 - |
سؤال
ولدي عناصر لقب نقر أن تبديل الرؤية لشعبة مباشرة تحتها. أريد / فو # شريط في التاريخ عند النقر على عناوين ولكن لا نريد التمرير صفحة حول. لذلك عندما تبحر بعيدا عن / فو # شريط سأكون قادرا على استخدام الزر مرة أخرى ولها شعبة الذي ID في window.location.hash تكون مرئية عند عودتهم.
هل هذا السلوك ممكن؟
المحلول
وهذا السلوك ممكنا إلى حد كبير. يجب أن ننظر إلى بعض المكتبات التي تم تطويرها لتعطيك هذه الوظيفة.
والتاريخ بسيط حقا: http://code.google.com/p/reallysimplehistory/و> SWFAddress: http://www.asual.com/swfaddress/
نصائح أخرى
لتغيير تجزئة دون الحاجة الصفحة تحديث / التمرير، يمكنك الآن ببساطة استخدام HTML5 history.pushState
.
history.pushState(null,null,'#hashexample');
ولقد مدعومة من قبل جميع المتصفحات الرئيسية:
وMDN:
لاحظ أيضا أن رابط المعلمة الأخيرة نستخدمه هنا، يمكن أن يكون أي رابط، لذلك لا يقتصر على التجزئة.
وسهلا كما هو الحصول على
var scrollmem = $('html,body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);
وآخر شيء يمكن أن تحاول يتغير هوية العنصر النقاط التجزئة لمؤقتا. عملت بالنسبة لي!
function changeHashWithoutScrolling(hash) {
var id = hash.replace(/^.*#/, ''),
elem = document.getElementById(id)
elem.id = id+'-tmp'
window.location.hash = hash
elem.id = id
}
مطلوب لإضافة تعليق على كاثرين الجواب ولكن ليس لدي مندوب بعد -
.وعظيم حل إلا أنها لا تعمل بالنسبة لي في كروم من $ ( 'أتش تي أم أل') scrollTop () دوما بإرجاع 0 - وهو تغيير طفيف على حل المشكلة:
scrollmem = $('html').scrollTop() || $('body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);
وباس على الاجابة من مشمس أدليت به هذه الوظيفة أن يتجنب أيضا غير معروف وبلا قيم:
function changeHashWithoutScrolling(hash) {
var id;
var elem;
id = hash.replace(/^.*#/, '');
if (id) {
elem = document.getElementById(id);
if (elem) {
elem.id = id + '-tmp';
window.location.hash = hash;
elem.id = id;
}
}
}