PDA

View Full Version : سوال: scrollTop



afi_program
یک شنبه 07 اردیبهشت 1393, 17:30 عصر
سلام دوستان. خسته نباشید.
یه سوال دارم:
من برای تشخیص رسیدن به انتهای صفحه از جاوااسکریپت استفاده کردم ولی در فایرفوکس تابع scrollTop کار نمیکنه.
یعنی document.body.scrollTop که باید مقدار اسکرول شده را برگردونه فقط صفر برمیگردونه!!! ولی در کروم درست کار میکنه
چیکار کنم؟




باتشکر

Javidhb
یک شنبه 07 اردیبهشت 1393, 23:17 عصر
بهترین کار استفاده از jQuery هست. ()scrollTop (https://api.jquery.com/scrollTop/)

اما با javascript:

window.onscroll = function() {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
alert('this is the end.');
}
};

afi_program
دوشنبه 08 اردیبهشت 1393, 19:39 عصر
ممنون دوست عزیز
البته خودم مشکل یه جوری حلش کرده بودم ولی بازم بسیار ممنون از جوابتون.
حالا یه سوال دیگه

من یه کدی شبیه به همین کدی که شما نوشتید نوشتم، بعد توی کروم و فایرفکس درست کار میکنه ولی توی اینترنت اکسپلورر این alert که نوشته شده وقتی که به انتهای صفحه میرسه چندین بار اجرا میشه، چرا؟؟ چیکارش کنم که درست بشه؟

با تشکر

Javidhb
سه شنبه 09 اردیبهشت 1393, 00:14 صبح
کد قبلی رو از یه سایت دیگه کپی کردم (یادم رفت منبع رو هم بنویسم)
برای من توی فایرفاکس اون حالتی که گفتید پیش میاد و توی ie 10 درست اجرا شد!


//تعریف متغیر جدید برای کنترل تعداد دفعات اجرای کد
var scrollRunOnce = true;
window.onscroll = function(e) {
//برای اینکه توی همه مرورگرها مقدار اسکرول رو درست بدست بیاره
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

if ( (window.innerHeight + scrollTop) >= document.body.offsetHeight ) {
//چک کردن برای اینکه مطمئن شیم کد فقط یکبار اجرا میشه
if( scrollRunOnce ) {
scrollRunOnce = false;
alert('this is the end.');

//برای دفعات بعد که اسکرول به انتهای صحفه میرسه
setTimeout(function(){scrollRunOnce=true;},500);
}
}
};

afi_program
سه شنبه 09 اردیبهشت 1393, 00:34 صبح
اون مشکلی که توی فایرفاکس باش مواجه میشین دلیلش چیز دیگس. به خاطر مقادیریه که برمیگردونه یعنی این شرطی که گذاشتین تو دفعات زیادی درست در میاد (یعنی مقدار scrolltop+innerheight به ازای خیلی از مقادیر scrolltop بیشتر از مقدار ofssetheight میشه).
ولی من توی انترنت اکسپلورر 11 مشکل دارم اونم مثل اینه که چندبار Onscroll تریگر میشه. استفاده از فلگ که نوشتید راه خوبیه و بلد بودم ولی گفتم شاید راه دیگه ای داشته باشه که اصلا به کل این تابع الکی چندبار فراخونی نشه.
بازم ممنون از وقتی که میگذارید.
البته من هنوز به اونچیزی که میخوام نرسیدم (در صورتی که نخوام از فلگ استفاده کنم).

با تشکر

Javidhb
سه شنبه 09 اردیبهشت 1393, 01:13 صبح
پس بهتره از jquery استفاده کنید:


$(window).scroll(function() {
if( $(window).scrollTop() + $(window).height() >= $(document).height() ) {
alert("بهترین روش...");
}
});