Ser*_*zov 9 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>
Run Code Online (Sandbox Code Playgroud)
JS小提琴https://jsfiddle.net/sergey_beloglazov/3ty7w12z/17/
更新: 我已经为该滑块做了一个解决方法,处理包装器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));
});
Run Code Online (Sandbox Code Playgroud)
selectBxPagerItem() -是一个选择函数。对于带有单击颜色框的滑块,我进行了类似的单击仿真:
$('.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;
});
Run Code Online (Sandbox Code Playgroud)
更新2019.07.20: 我最近发现,以前的解决方案现在不起作用。我检查了一下,发现内部元素没有:hover状态;因此,鼠标悬停事件还有另一种解决方案
/* 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');
}
});
Run Code Online (Sandbox Code Playgroud)
解决方法是,我发现单击横幅时,将触发鼠标悬停事件,然后鼠标事件才处理单击事件。因此,此刻幻灯片没有:hover状态。所以我只保存上一个悬停的横幅。检查解决方案:https : //jsfiddle.net/sergey_beloglazov/5kmdacgn/22/
Osm*_*tos 10
看来最新的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
});
Run Code Online (Sandbox Code Playgroud)
我建议密切关注/为此线程提供更新和更好的解决方案:https : //github.com/stevenwanderski/bxslider-4/issues/1240
小智 7
我改用了 mousedown 事件
if(window.navigator.userAgent.toLowerCase().indexOf("chrome") > 0) {
$("body").on("mousedown", ".bx-viewport a", function() {
if($(this).attr("href") && $(this).attr("href") != "#") {
window.location=$(this).attr("href");
}
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5818 次 |
最近记录: |