javascript - 如何解决 Chrome 73 中 bxSlider 项目的点击事件问题?

标签 javascript jquery google-chrome bxslider

在 Chrome 更新到版本 73 后,bxSlider 的内部项目点击事件不会触发。如何在新 Chrome 中为元素触发 .on('click') 事件?

它会在幻灯片移动时在 Chrome 中触发。 在 FireFox 中一切正常

<div class="slider-pager">
  <div class="slider-pager__item"><img src="1.jpg" alt=""></div>
  <div class="slider-pager__item"><img src="2.jpg" alt=""></div>
</div>

<script>
        carouselProduct = $('.slider-pager').bxSlider({
            maxSlides:  3,
            minSlides: 3,
            slideWidth: 90,
            infiniteLoop: false,
            moveSlides: 1,
            slideMargin: 8,
            pager: false,
            nextSelector: '.slider__nav--next',
            prevSelector: '.slider__nav--prev',
            nextText: '→',
            prevText: '←'

        });
  $('.slider-pager__item').on('click', function (event) {
    //Don't fire in Chrome 73, works in FireFox
            $('.slider-pager__item').removeClass('active');
            $(this).addClass('active');

        });
</script>

JS fiddle https://jsfiddle.net/sergey_beloglazov/3ty7w12z/17/

更新: 我已经为这个 slider 做了一个解决方法,处理包装器 onClick 事件:

$('.slider-pager').parent().on('click', function (event) {
    var $hover_item = $('.slider-pager__item:hover');
    //Checking if we have found the element
    if ($hover_item.length>0){
        selectBxPagerItem($hover_item);
    }
});

$('.slider-pager__item').on('click', function (event) {
    selectBxPagerItem($(this));
});

selectBxPagerItem() - 是一个选择函数。 对于点击时带有颜色框的 slider ,我做了一个类似的点击模拟:

        $('.slider-for').parent().on('click', function (event) {
            var $hover_item = $('.slider-for__item:hover a');
            if (($hover_item.length>0)&&(!window.slider_for_click_imitation)){
                window.slider_for_click_imitation=true;
                $hover_item.click();
            }
            window.slider_for_click_imitation=false;
        });

更新 2019.07.20: 我最近发现,以前的解决方案现在不起作用。 我检查了一下,发现内部元素没有 :hover 状态; 所以,还有另一种解决方法是 mouseover 事件

/* A Chrome bx slider bug workaround */

//A slide, that has the mouse pointer over
window.bxslider_mouse_over_slide=null;
$(function() {
    $('.slider-pager div').mouseover(
        function(event) {
            window.bxslider_mouse_over_slide=$(this);
        });

});
$('.slider-pager').parent().on('click', function (event) {
    //Check if we've got a slide under the mouse
    if ((window.bxslider_mouse_over_slide!=null)){
            $('.slider-pager__item').removeClass('active');
        window.bxslider_mouse_over_slide.addClass('active');
    }
});

解决方法是,我发现当我点击横幅时,鼠标悬停 事件会触发,然后它才会处理点击事件。所以那一刻幻灯片没有 :hover 状态。所以我只保存最后一个悬停的横幅。 查看解决方案:https://jsfiddle.net/sergey_beloglazov/5kmdacgn/22/

最佳答案

看起来最新的 Chrome 更新使 bxSlider 内的任何点击都指向容器而不是其中的链接。

在选项中添加 touchEnabled: false 会禁用滑动行为,但会解决点击问题。例如:

 carouselProduct = $('.slider-pager').bxSlider({
            maxSlides:  3,
            minSlides: 3,
            slideWidth: 90,
            infiniteLoop: false,
            moveSlides: 1,
            slideMargin: 8,
            pager: false,
            nextSelector: '.slider__nav--next',
            prevSelector: '.slider__nav--prev',
            nextText: '→',
            prevText: '←',
            touchEnabled: false
        });

我建议关注/贡献此线程以获取更新和更好的解决方案: https://github.com/stevenwanderski/bxslider-4/issues/1240

关于javascript - 如何解决 Chrome 73 中 bxSlider 项目的点击事件问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55389421/

相关文章:

javascript - 显示 XSL 和 PDF 导出以及下拉列表,允许我们选择要显示的行数

javascript - 使用视频源作为 Canvas 视频轨道的 OpenTok 问题 - Google Chrome 66

javascript - 需要帮助使用 Javascript 设置表格高度中的 div

javascript - 单元测试 Angular Bootstrap 模式服务

android - 使溢出滚动条在 iOS 和 Android 移动设备上可见

javascript - 如何创建未定义的错误但默默地传入错误控制台

javascript - Chrome 扩展程序如何收到后台脚本要关闭的通知?

javascript - 如何在上传目录时删除 Chrome 中的警告消息

javascript - 在变量中使用 .each() .find() 和 .text()

Javascript - 输入文本并输出到多个区域