You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置opacity为0且pointer-events为none的重叠幻灯片仍可被点击

问题

我已经把幻灯片的opacity设为0,同时将pointer-events设置为none,但隐藏的幻灯片还是能被点击。我的轮播图有2张幻灯片,停在第一张时,点击它居然会触发第二张幻灯片的超链接。代码如下:

//programming slideshow

$(function () {
    var slide_index = 1;
    displaySlides(slide_index);
    function nextSlide() {
        displaySlides(slide_index++);
    }
    function prevslide() {
        displaySlides(slide_index--);
    }
    function displaySlides() {
        var i;
        var slides = document.getElementsByClassName("programming-slides");
        if (slide_index > slides.length) { slide_index = 1 }
        if (slide_index < 1) { slide_index = slides.length }
        for (i = 0; i < slides.length; i++) {
            slides[i].style.opacity = 0;
        }
        slides[slide_index - 1].style.opacity = 1;
        for (var i = 0; i < slides.length; i++) {
            // 如果幻灯片不可见,设置pointer-events为none
            if (slides[i].style.opacity === '0') {
                slides[i].style.pointerEvents = 'none';
            } else {
                // 否则设置为auto
                slides[i].style.pointerEvents = 'auto';
            }
        }
    }
    var next = document.getElementById('programming-next');
    next.addEventListener('click', nextSlide);

    var prev = document.getElementById('programming-prev');
    prev.addEventListener('click', prevslide);
})
解决方案

问题出在你通过读取style.opacity判断幻灯片可见性的逻辑上——内联样式的opacity值可能存在格式差异(比如被浏览器解析为'0.0'而非'0'),导致判断失效,隐藏的幻灯片没被正确设置pointer-events: none。

直接根据幻灯片的索引判断是否为当前活跃幻灯片,逻辑更可靠,修改后的代码如下:

//programming slideshow

$(function () {
    var slide_index = 1;
    displaySlides(slide_index);
    function nextSlide() {
        displaySlides(slide_index++);
    }
    function prevslide() {
        displaySlides(slide_index--);
    }
    function displaySlides() {
        var i;
        var slides = document.getElementsByClassName("programming-slides");
        if (slide_index > slides.length) { slide_index = 1 }
        if (slide_index < 1) { slide_index = slides.length }
        
        // 合并循环,一次完成所有样式设置
        for (i = 0; i < slides.length; i++) {
            if (i === slide_index - 1) {
                // 当前显示的幻灯片:可见+允许点击+上层显示
                slides[i].style.opacity = 1;
                slides[i].style.pointerEvents = 'auto';
                slides[i].style.zIndex = 10;
            } else {
                // 隐藏的幻灯片:透明+禁止点击+下层显示
                slides[i].style.opacity = 0;
                slides[i].style.pointerEvents = 'none';
                slides[i].style.zIndex = 1;
            }
        }
    }
    var next = document.getElementById('programming-next');
    next.addEventListener('click', nextSlide);

    var prev = document.getElementById('programming-prev');
    prev.addEventListener('click', prevslide);
})

另外还添加了z-index设置:如果你的幻灯片是绝对定位重叠布局,隐藏的幻灯片可能会在可见幻灯片的上层,层级设置能确保点击只会落到当前可见的幻灯片上,双重保障避免误触发。

内容的提问来源于stack exchange,提问作者jdhedrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:15:21