Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скролл контента при удержании левой кнопки мыши (https://javascript.ru/forum/dom-window/78235-skroll-kontenta-pri-uderzhanii-levojj-knopki-myshi.html)

Андрей812 13.08.2019 13:55

Скролл контента при удержании левой кнопки мыши
 
Подскажите, как сделать чтобы при удержании левой кнопки мыши не происходил клик по ссылки. А если кликнуть по ссылке был переход.
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Скроллинг мышью</title>
<style type="text/css">
.scroll 
{   position:absolute;
    top:10px;
    left:100px;
	height: 100px;
	overflow-x: auto;
	width: 200px;
       cursor: all-scroll;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript">
    window.onload = function () {
        var scr = $(".scroll");
        scr.mousedown(function () {
            var startX = this.scrollLeft + event.pageX;
            var startY = this.scrollTop + event.pageY;
            scr.mousemove(function () {
                this.scrollLeft = startX - event.pageX;
                this.scrollTop = startY - event.pageY;
                return false;
            });
        });
        $(window).mouseup(function () {
            scr.off("mousemove"); 
        });
    }
</script>

</head>
<body>
<div class="scroll">
  <a href="#"><img src="1.jpg"/></a>
  <a href="#"><img src="2.jpg"/></a>
</div>
</body>
</html>

demoniqus 23.08.2019 14:20

У тебя тема не соответствует телу вопроса.

let src = $('.scroll');
let currentSrc;
src.mousedown(function(e){
  currentSrc = e.targetEvent;
});
src.mouseup(function(e){
  if (e.targetEvent !== currentSrc) {
     e.preventDefault ? e.preventDefault() : e.cancelBubble = true;
     return false;
  }
})


Если объекты, на которых возникли mouseDown и mouseUp отличаются, то нужно погасить событие mouseUp. Тогда не должен возникнуть click по ссылке. Также вообще-то следует предусмотреть выход курсора за пределы окна - в таком случае события mouseUp может не возникнуть и не выполнится проверка, останавливающая развитие события. Стоит довесить mouseout...

Кроме того, ЗАРУБИ на носу, иначе когда-нибудь потеряешь мозг - jQuery не устанавливает обработчик, а добавляет его в очередь. Поэтому конструкция, когда ты внутри mouseDown делаешь src.mouseMove(function (){}) приведет к тому, что у тебя по мере последующих mouseDown на элементе будет расти количество одинаковых обработчиков. Поверь, ничего хорошего это не сулит...

Кстати, я не уверен что mouseup стоило вешать на window в твоем случае. Уж скорее на body.


Часовой пояс GMT +3, время: 15:04.