Transform:translate methodu ile kaydırılan slider yapmaktayım. JavaScript ile ekranın genişliğini alıp her bir slider kutucuğunun boyutunu ona göre ayarlıyorum. Her şey tamam lakin bir sorunum var. Diyelim ki ekran genişliği 700px den fazla, ben bunu 700 den aşağı düşürüp tekrar slider kontrol butonlarına tıklayınca slideislem fonksiyonum 2 kere dönüyor. Ve bunun sonucunda bir adet kayacağına iki adet kayıyor ve aynı zamanda bu her seferinde bir artıyor. Ben her koşulda sadece bir kere çalışmasını istiyorum. Bunun nedenini bir türlü anlayamadım. Lütfen bana yardım edin uzun süredir bunun için uğraşmaktayım, en az 4-5 kere silip yazdım neredeyse. Canımı çok sıktı

(Kontrol butonlarına tıkladığımda her seferinde bir kere index değeri slideislem 'e girip bir tane kaydırıyor lakin dediğim gibi diğer media query sorgusunun içi çalışırsa eğer index değeri iki kere slideislem 'e giriyor. mesela index = -1 dönünce bir kere kaydırmış oluyorum. Ama bu hem -1 hem -2 oluyor bir anda iki kere dönüyor. Ve bu her seferinde diğer query nin içine girince artıyor. Bunu ben yakalayamadım belki siz yakalarsınız)
<script>
var index = 0;
document.querySelector('body').onload = function() {
var win = window,
relatedposts = document.querySelectorAll('.post_box_slider'),
slider_container = document.getElementById('slider_container'),
x = win.innerWidth
// myfunction lara gönderilen x ekran genişliği değerini tutuyor
// eger 700 px den küçükse slider kısmı 2 kutucuk görünecek
function myFunction(z, x) {
if (z.matches) {
index = 0;
for (var a = 0; a < relatedposts.length; a++) {
relatedposts[a].style.width = (x / 2) + 'px';
}
// slider kutucuklarının hepsinin toplam genişliği
slider_container.style.width = (((x / 2) + 1) * <?= $tema_ayarlari[0]['relatedpostscount'] ?>) + 'px';
var newrelatedposts = document.querySelectorAll('.post_box_slider').length
document.querySelector('.slider_next_btn').addEventListener('click', function() {
if (index > -(newrelatedposts - 2))
index--
slideislem(2, index)
})
document.querySelector('.slider_prev_btn').addEventListener('click', function() {
if (index < 0) {
index++
slideislem(2, index)
}
})
}
}
// eger 700 px den büyükse slider kısmı 4 kutucuk görünecek
function myFunction2(y, x) {
if (y.matches) {
index = 0;
for (var a = 0; a < relatedposts.length; a++) {
relatedposts[a].style.width = (x / 4) + 'px';
}
// slider kutucuklarının hepsinin toplam genişliği
slider_container.style.width = (((x / 4) + 1) * <?= $tema_ayarlari[0]['relatedpostscount'] ?>) + 'px';
var newrelatedposts = document.querySelectorAll('.post_box_slider').length
document.querySelector('.slider_next_btn').addEventListener('click', function() {
if (index > -(newrelatedposts - 4))
index--
slideislem(4, index)
})
document.querySelector('.slider_prev_btn').addEventListener('click', function() {
if (index < 0) {
index++
slideislem(4, index)
}
})
}
}
// 700 px altı ve üstü için çalışacak media query fonksiyonları
var z = window.matchMedia("(max-width: 700px)")
myFunction(z, x) // Call listener function at run time
z.addListener(myFunction) // Attach listener function on state changes
var y = window.matchMedia("(min-width: 700px)")
myFunction2(y, x) // Call listener function at run time
y.addListener(myFunction2) // Attach listener function on state changes
// ekran genişliği oynatılırsa tetikleniyor
function checkMediaQuery() {
var win = window,
relatedposts = document.querySelectorAll('.post_box_slider')
x = win.innerWidth
if (window.innerWidth > 700) {
index = 0
for (var a = 0; a < relatedposts.length; a++) {
relatedposts[a].style.width = (x / 4) + 'px';
}
// slider kutucuklarının hepsinin toplam genişliği
slider_container.style.width = (((x / 4) + 1) * <?= $tema_ayarlari[0]['relatedpostscount'] ?>) + 'px';
slideislem(4, index)
} else if (window.innerWidth < 700) {
index = 0
for (var a = 0; a < relatedposts.length; a++) {
relatedposts[a].style.width = (x / 2) + 'px';
}
// slider kutucuklarının hepsinin toplam genişliği
slider_container.style.width = (((x / 2) + 1) * <?= $tema_ayarlari[0]['relatedpostscount'] ?>) + 'px';
slideislem(2, index)
}
}
window.addEventListener("resize", checkMediaQuery);
// slider kısmının kaydırılmasını tetikliyor
function slideislem(b, index) {
console.log(index)
document.getElementById('slider_container').style.transform = 'translate3d(' + (index * (x / b + 1)) + 'px, 0px, 0px)'
}
}
</script>