繁体   English   中英

如何使用 Javascript 定位特定的 div

[英]How to target a specific div with Javascript

很抱歉我以这种方式打扰......我想我有一个非常简单的问题,但我无法解决它......

(我正在使用香草 Javascript)

我在一个页面中有多个图像轮播,我无法让它们工作。

我设法让一个旋转木马工作,但如果我插入第二个,它就不起作用。

我尝试为代表轮播id="voucher1"的每个 div 提供 id,并将它们定位在 javascript 中

carouselA = carousel('#voucher1')
function carousel(id){
   const carouselSlide = document.querySelector(id + '.carousel-slide');
}

但它不起作用......

这是我的 HTML

        <div class="vouchers">
            <span class="voucherstitle">Gutscheine</span>
            <div class="voucher" id="voucher1">
                <div class="carousel-container">
                    <button id="prevBtn">←</button>
                    <button id="nextBtn">→</button>
                    <div class="carousel-slide">
                        <img src="images/vouchers/firstvoucher/voucher3.jpg" id="lastclone" alt="">
                        <img src="images/vouchers/firstvoucher/voucher1.jpeg">
                        <img src="images/vouchers/firstvoucher/voucher2.jpg">
                        <img src="images/vouchers/firstvoucher/voucher3.jpg">
                        <img src="images/vouchers/firstvoucher/voucher1.jpeg" id="firstclone" alt="">
                    </div>
                </div>
            </div>
            <div class="voucher" id="voucher2">
                <div class="carousel-container">
                    <button id="prevBtn">←</button>
                    <button id="nextBtn">→</button>
                    <div class="carousel-slide">
                        <img src="images/vouchers/firstvoucher/voucher3.jpg" id="lastclone" alt="">
                        <img src="images/vouchers/firstvoucher/voucher1.jpeg">
                        <img src="images/vouchers/firstvoucher/voucher2.jpg">
                        <img src="images/vouchers/firstvoucher/voucher3.jpg">
                        <img src="images/vouchers/firstvoucher/voucher1.jpeg" id="firstclone" alt="">
                    </div>
                </div>
            </div>
        </div>

这是我的 JavaScript

carousel('#voucher1');
carousel('#voucher2');

function carousel(id){
    const carouselSlide = document.querySelector(id + '.carousel-slide');
    const carouselImages = document.querySelectorAll(id + '.carousel-slide img')
    
    const prevBtn = document.querySelector(id + '#prevBtn');
    const nextBtn = document.querySelector(id + '#nextBtn');
    
    let counter = 1;
    let size = carouselImages[0].clientWidth;
    carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)'
    
    nextBtn.addEventListener('click', () =>{
        let size = carouselImages[0].clientWidth;
        if(counter<0) return;
        carouselSlide.style.transition = "transform 0.4s ease-in-out";
        counter++;
        carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
    
        nextBtn.disabled=true;
        setTimeout(function(){
            nextBtn.disabled=false;
        },400)
    });
    
    prevBtn.addEventListener('click', () =>{
        let size = carouselImages[0].clientWidth;
        carouselSlide.style.transition = "transform 0.4s ease-in-out";
        counter--;
        carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
    
        prevBtn.disabled=true;
        setTimeout(function(){
            prevBtn.disabled=false;
        },400)
    });
    
    carouselSlide.addEventListener('transitionend', () =>{
        let size = carouselImages[0].clientWidth;
        if(carouselImages[counter].id === 'lastclone'){
            carouselSlide.style.transition = "none";
            counter = carouselImages.length-2;
            carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
        }
        if(carouselImages[counter].id === 'firstclone'){
            carouselSlide.style.transition = "none";
            counter = carouselImages.length - counter;
            carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
        }
    });
    
    window.addEventListener('resize', function(event) {
        let size = carouselImages[0].clientWidth;
        carouselSlide.style.transition = "none";
        carouselSlide.style.transform = 'translateX(' + (-size * counter) + 'px)';
    }, true);
}

再次抱歉...也许这是一个要解决的简单问题,但我无法找到解决方案...提前致谢!

这里有一些问题:

// XXX 
// Unused, undeclared identifier:
carouselA = carousel('#voucher1')


function carousel(id){
// XXX 
// ID selector begins with octothorpe, #.
// XXX
// No element exists with id="voucher1" and class="carousel-slide". 
// You need a space between the two to select the descendant.
document.querySelector(id + '.carousel-slide');
}

反而:

document.querySelector(id + ' .carousel-slide');

命名变量它们是什么。 对于任何名为id的 function 参数,只传递元素 id 并更改被调用者以反映这一点。 否则,如果您想传入前缀 octothorpe,请重命名参数idSelector

在您的 javascript 文件中,您在初始化之前调用了 function。 你应该总是在调用它之前初始化一个 function 否则你会得到一个错误。 尝试交换它们,看看是否有效:

//Initialise the function
function carousel(id){
(Your function here)
}

//Then call the function
carousel('#voucher1');
carousel('#voucher2');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM