v2.5.2
Giriş yap

ilk fonksiyon

ferid244
351 defa görüntülendi

merhaba hocam soyle bir sorum var kodlar uzun oldugu icin websitem uzerinden gostermeye karar verdim https://isqur.com/index.php?sikayetteklif burada kullanicilarin yazdigi mesajlar bir txt dosyasinin icerisine yaziliyor ve safyanin scrolu tam asagidayken fetch ile txt dosyasinda veriler setinterval seklinde cekiliyor sayfayi yukariya kaldirdigim zaman ise clear interval fonksiyonu calisiyor ve fetch duruyor ilk sayfa acildiginda kod calisiyor ama bir tane mesaj gonderdikten sonra fonksiyon bir daha calismiyor yeniden bilgisayarla f5 tusuna basmam gerekiyor ki scroll fonksiyonu yeni calissin ben bu isi cozemedim lutfen yardim ederseniz sevinirim

Cevap yaz
Cevaplar (3)
munzevi
664 gün önce

"tamam da" sorduğun soruyla alakası var mı şuan da ki hatanın? tabi ki yok. yani benim yaptığım "olmuyor" değil. şuan istediğin şekilde çalışıyor. hata var mı, evet kontrol ettim hata var. bu da şundan kaynaklanıyor, window.scrollTo(0, document.body.scrollHeight); konuda bahsettiğin hataya odaklandığım için, bu kısma dikkat etmemişim. sen scrolun yukarı gitmesine baştan beri izin vermemişsin ki. sonra olmuyor. bal gibide oluyor, lütfen pasif agresif tavırla hesap sormak yerine, kodun ne yaptığından çok nasıl çalıştığını anlamaya çalışınız. al, kopyala yapıştır, işini gör. böyle olmamalı bence.

document.addEventListener('scroll', () => {
    if((window.innerHeight + window.scrollY) >= document.body.scrollHeight)
        fetch("https://localhost/data.txt").then(async response => {
            document.querySelector('#mesajlar').innerHTML = await response.text();
        });
});

buyrun sıfırdan yazdım. amac neydi; scrollbar'ın mevcut pozisyonu ekranın mevcut yüksekliğine eşit veya üzerinde ise, içeriği yükle. süre tanımlayıp, daha sonra bunu kaldırmaya bile gerek yoktu aslında. burada bak, ekstra kod dahi yok, üstüne kodları çıkarttık hatta. kendi ayağına sıkmak istiyorsan bu şekilde devam et, ama gelişim için biraz gayret arkadaşım ya. ben biraz kolay alınıyorum, "tamam da" diye yazınca siz biraz sinirlendim kusra bakmayın.

not: azami yükseklik, javascript'in verdiği yükseklikten +15 piksel fazla çıkıyor bende, bu da geriye dönüşteki o 15 piksellik fark'dan dolayı, tekrar sorguya alabiliyor. sizde de öyleyeyse buna göre -15 düşürün. console.log((window.innerHeight + window.scrollY), document.body.scrollHeight) bununla kontrol edebilirsin.

ferid244
664 gün önce

tamam da hocam siz yaptiginizda da olmuyor scrollu yukariya kaydirsam da intervali silmiyor yine devam ediyor durmuyor fetch

munzevi
664 gün önce

soruyu anladığım kadarıyla, kodları bulmaya çalıştım. bazı değişkenlerde eksik vardı, test ederek kendim tamamladım. en temel sorun. scrolun insmesini sağlayan anonim fonksiyonun koşul içersine yazılmasından kaynaklanıyor, dolayısıyla else durumda tanımsız göründüğünden çalışmıyor. çalışan yöntemi daha kısa olarak düzenleyip yazdım.
benim kodum

    window.onscroll = function(ev) {
        var silinterval = setInterval(() => {
            fetch("https://localhost/data.txt").then(async response => {
                var data = await response.text();
                 document.querySelector('#mesajlar').innerHTML = data;
                window.scrollTo(0, document.body.scrollHeight);
            });
        }, 2000);
        (window.innerHeight + window.scrollY) >= document.body.scrollHeight ?
            silinterval : clearInterval(silinterval);
    };

senin kodun ve hatanın sebep olduğu nokta yorum satırı olarak işaretli;

    window.onscroll = function(ev) {
        if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
            /*
            silinterval = setInterval(() => {
                fetch("sikayet.txt").then(function(response) {
                    return response.text();
                }).then(function(data) {
                    mesajlar.innerHTML = data
                    window.scrollTo(0, document.body.scrollHeight);
                })
            }, 2000);
            */
        } else {
            clearInterval(silinterval);
        }
    };

kendi kodundan devam etmek istersen düzenlemen gereken, tanımlamayı koşuldan önce yazmak;

    window.onscroll = function(ev) {
    var silinterval = setInterval(() => {
                fetch("sikayet.txt").then(function(response) {
                    return response.text();
                }).then(function(data) {
                    mesajlar.innerHTML = data
                    window.scrollTo(0, document.body.scrollHeight);
                })
            }, 2000);
        if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) {
            silinterval;
        } else {
            clearInterval(silinterval);
        }
    };