#javascript #jquery #google-chrome #bxslider
#javascript #jquery #google-chrome #bxslider
Вопрос:
Событие щелчка по внутреннему элементу bxSlider не запускается после обновления Chrome до версии 73. Как я могу запустить событие .on (‘click’) для элементов в новом Chrome?
Он срабатывает в 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
ОБНОВЛЕНИЕ: я создал обходной путь для этого слайдера, обрабатывающий событие 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-for').parent().on('click', function (event) {
var $hover_item = $('.slider-for__item:hover a');
if (($hover_item.length>0)amp;amp;(!window.slider_for_click_imitation)){
window.slider_for_click_imitation=true;
$hover_item.click();
}
window.slider_for_click_imitation=false;
});
ОБНОВЛЕНИЕ 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');
}
});
Создавая обходной путь, я обнаружил, что когда я нажимаю на баннер, запускается событие наведения курсора мыши, и только тогда оно обрабатывает событие щелчка. Так что этот момент слайд не имеет состояния : hover. Итак, я просто сохраняю последний наведенный баннер.
Проверьте решение:https://jsfiddle.net/sergey_beloglazov/5kmdacgn/22
Комментарии:
1. Я сделал обходной путь для этого слайдера: «$ (‘.slider-pager’).parent().on (‘click’, функция (событие) { var $ hover_item = $(‘.slider-pager__item:hover’); //Проверяем, нашли ли элемент if ($hover_item.length> 0){ selectBxPagerItem($hover_item); } }) ; «
2. I found this solution and it works: «It works on Chrome when you add touchEnabled: false» support.google.com/chrome/thread/3211737/… но и ваше решение тоже работает
Ответ №1:
Похоже, что последнее обновление 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
Комментарии:
1. Спасибо за вашу ссылку на github! Жаль, мне не удалось найти это в Google, хотя я трачу много времени на поиск исправления в Интернете, вы можете попробовать google.ru / … — ссылки на эту страницу нет.
2. Также у меня было нарушение в консоли Chrome каждый раз, когда я нажимал на изображение bxSlider: «[Нарушение] Добавлен непассивный прослушиватель событий к событию touchstart, блокирующему прокрутку. Подумайте о том, чтобы пометить обработчик событий как «пассивный», чтобы сделать страницу более отзывчивой. Смотрите chromestatus.com/feature/5745543795965952 » Но я не знаю, было это до обновления или нет. Я попробую решение, может быть, это поможет.
3. Я попробовал «touchEnabled: (navigator.maxTouchPoints> 0)», Нарушения в консоли Chrome исчезли, но баннеры перестали перемещаться при пролистывании на iPad. Поэтому я думаю, что это не полное решение. Я не буду его использовать. Также я читал, что некоторые люди перешли на старую версию bxSliders, но я тоже этого не хочу. Другие решения касаются изменения кода плагина. Для меня это кажется слишком рискованным. Мое решение работает нормально, оно мне подходит. Так что теперь у меня есть только некоторые опасения по поводу нарушений в консоли Chrome.
Ответ №2:
Вместо этого я использовал событие mousedown
if(window.navigator.userAgent.toLowerCase().indexOf("chrome") > 0) {
$("body").on("mousedown", ".bx-viewport a", function() {
if($(this).attr("href") amp;amp; $(this).attr("href") != "#") {
window.location=$(this).attr("href");
}
});
}
Комментарии:
1. Это решение! Спасибо