Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Менять курсор при нажатии левой кнопки мыши (https://javascript.ru/forum/dom-window/75698-menyat-kursor-pri-nazhatii-levojj-knopki-myshi.html)

Igorsrt 30.10.2018 13:52

Менять курсор при нажатии левой кнопки мыши
 
Здравствуйте!
Есть Slick Slider, включена функция "листания" слайдов мышкой (draggable: true). Для перелистывания нужно нажать кнопку мыши на слайде и потянуть влево или вправо.
Я хочу, что бы при нажатии кнопки мыши на слайде курсор менялся (мне кажется так понятнее будет, что слайд можно пролистнуть).
Искал ответ в гугл, но ничего не нашел - либо, кроме меня, это нафиг никому не нужно, либо решение слишком очевидно, что бы о нем писать.. ))

laimas 30.10.2018 14:01

Цитата:

Сообщение от Igorsrt
Искал ответ в гугл, но ничего не нашел

http://htmlbook.ru/css/cursor

Igorsrt 30.10.2018 14:12

в css можно либо при наведении (:hover) либо :active менять стили.. а мне же нужно, что бы при клике на кнопку (нажал кнопку - поменялся курсор, отпустил - вернулся прежний)

laimas 30.10.2018 14:19

Ну так меняйте скриптом, проблема в самом курсоре, или как именно в этом плагине изменить?

Igorsrt 30.10.2018 14:20

Цитата:

Сообщение от laimas (Сообщение 497421)

Цитата:

Сообщение от laimas (Сообщение 497426)
Ну так меняйте скриптом, проблема в самом курсоре, или как именно в этом плагине изменить?

проблема - как именно менять ;)

laimas 30.10.2018 14:33

Согласно документации можно устанавливать события, значит попробуйте обработчики событий mousedown, mouseup, где и изменяйте курсор.

MC-XOBAHCK 30.10.2018 15:22

Цитата:

Сообщение от Igorsrt (Сообщение 497424)
в css можно либо при наведении (:hover) либо :active менять стили

Не совсем так, через CSS можно и просто назначить курсор для элемента, без всяких hover и active.

Цитата:

Сообщение от Igorsrt (Сообщение 497424)
мне же нужно, что бы при клике на кнопку (нажал кнопку - поменялся курсор, отпустил - вернулся прежний)

Не совсем понятно и в вопросе нет никакого исходника html-макета.

Если поможет, приведу такой пример:
<style>.test{display: inline-block; width: 50px; height: 50px; margin-right: 15px; border: solid 1px #ccc;}</style>


<div class="test" style="background: red;"></div>
<div class="test" style="background: blue;"></div>
<div class="test" style="background: brown;"></div>
<div class="test" style="background: yellow;"></div>
<div class="test" style="background: orangered;"></div>
<button id="btn">Сменить курсор</button>


<script>
    document.querySelector('#btn').addEventListener('click', function() {
        let cursorArr = ['e-resize', 'col-resize', '-webkit-grab', 'all-scroll', 'pointer'];

        this.classList.toggle('cursor-active');
        
        let blocks = document.querySelectorAll('.test');

        if (this.classList.contains('cursor-active')) {
            this.textContent = 'Вернуть курсор';
            blocks.forEach((el, i) => el.style.cursor = cursorArr[i]);
        }
        else {
            this.textContent = 'Сменить курсор';
            blocks.forEach((el, i) => el.style.cursor = 'auto');
        }
    })
</script>

Igorsrt 30.10.2018 15:34

Цитата:

Сообщение от laimas (Сообщение 497430)
Согласно документации можно устанавливать события, значит попробуйте обработчики событий mousedown, mouseup, где и изменяйте курсор.

вот такой код попробовал:
jQuery('.slider-for').on({
  'mousedown': function (e) {
    jQuery(this).addClass('mouseDown');
    return false;
  },
  'mouseup': function () {
    jQuery(this).removeClass('mouseDown');
  }
});

При нажатии на кнопку - класс mouseDown добавляется, но при отпускании кнопки - почему-то пока не удаляется...:-E

laimas 30.10.2018 15:54

В общем то должно работать. Меняйте привило, то есть .css({cursor: нужный/текущий})

j0hnik 30.10.2018 18:13

<style>
		div{
			width: 500px;
			height: 500px;
		}
	</style>
<div class="slider-for">слайдер</div>
	<script>

document.querySelector('.slider-for').onmousedown = e => e.target.style.cursor = 'pointer';
document.querySelector('.slider-for').onmouseup = e => e.target.style.cursor = 'default';

	</script>

Igorsrt 30.10.2018 22:14

Цитата:

Сообщение от j0hnik (Сообщение 497456)
<style>
		div{
			width: 500px;
			height: 500px;
		}
	</style>
<div class="slider-for">слайдер</div>
	<script>

document.querySelector('.slider-for').onmousedown = e => e.target.style.cursor = 'pointer';
document.querySelector('.slider-for').onmouseup = e => e.target.style.cursor = 'default';

	</script>

благодарю!! Все просто как обычно - для тех кто знает JS ))

j0hnik 30.10.2018 22:26

Igorsrt,
<style>
	div{
		background-color: red;
		width: 500px;
		height: 500px;
	}
	div:active{
		cursor: pointer;
	}
</style>

	<div class="slider-for">слайдер</div>

усовершенствованная версия

Igorsrt 30.10.2018 22:37

Цитата:

Сообщение от j0hnik (Сообщение 497456)
<style>
		div{
			width: 500px;
			height: 500px;
		}
	</style>
<div class="slider-for">слайдер</div>
	<script>

document.querySelector('.slider-for').onmousedown = e => e.target.style.cursor = 'pointer';
document.querySelector('.slider-for').onmouseup = e => e.target.style.cursor = 'default';

	</script>

хотя нет, не получается так... я хочу курсор grab поставить - не срабатывает.. лучше наверно, все-таки через классы css делать

SuperZen 30.10.2018 22:57

https://css-tricks.com/using-css-cur...le-header-id-1
Наведи на кнопки Happy, Sad, Meh )

Igorsrt 30.10.2018 23:07

Цитата:

Сообщение от SuperZen (Сообщение 497479)
https://css-tricks.com/using-css-cur...le-header-id-1
Наведи на кнопки Happy, Sad, Meh )

мне не нужно "наведи", мне нужно "нажми левую кнопку мышки" ))

Igorsrt 30.10.2018 23:49

Цитата:

Сообщение от Igorsrt (Сообщение 497437)
вот такой код попробовал:
jQuery('.slider-for').on({
  'mousedown': function (e) {
    jQuery(this).addClass('mouseDown');
    return false;
  },
  'mouseup': function () {
    jQuery(this).removeClass('mouseDown');
  }
});

При нажатии на кнопку - класс mouseDown добавляется, но при отпускании кнопки - почему-то пока не удаляется...:-E

в общем, в конце-концов все заработало вот с этим изначальным скриптом... Всем спасибо большое!

SuperZen 30.10.2018 23:52

еще, наверное, забыл добавить, что не отпускается тогда, когда курсор вышел за пределы элемента.

Для этого надо ставить слушатель на документ.)

Igorsrt 31.10.2018 00:13

Цитата:

Сообщение от SuperZen (Сообщение 497483)
еще, наверное, забыл добавить, что не отпускается тогда, когда курсор вышел за пределы элемента.

Для этого надо ставить слушатель на документ.)

там такая ситуация: если я нажал кнопку мышки на слайдере и нажатой перевожу курсор за его пределы (курсор при этом меняется на изначальный), потом отпускаю кнопку и обратно навожу на слайдер - то он опять как при нажатии (class="mouseDown")... это мелочи конечно - но если кто подскажет как починить, было бы супер ))

SuperZen 31.10.2018 00:17

хо-хо^^ я тебя раскусил...

Для этого надо ставить слушатель на документ.)
а это можешь, "ну или на ближайшую область"?)

j0hnik 31.10.2018 00:21

var el = document.querySelector('.slider-for'), flag = 0;
		el.addEventListener('mousedown', e =>{
			flag = 1;
			el.style.cursor = 'pointer';
		});
		document.addEventListener('mouseup', e =>{
			flag = 0;
			el.style.cursor = 'default';
		});
		el.addEventListener('mouseout', e =>el.style.cursor = 'default');
		el.addEventListener('mouseover' ,e=>{
			if(flag) el.style.cursor = 'pointer';
		});

Malleys 31.10.2018 01:35

Цитата:

Сообщение от Igorsrt
мне же нужно, что бы при клике на кнопку (нажал кнопку - поменялся курсор, отпустил - вернулся прежний)

Цитата:

Сообщение от Igorsrt
я хочу курсор grab поставить

Цитата:

Сообщение от Igorsrt
мне нужно "нажми левую кнопку мышки"

<style>
.slider-for {
	cursor: grab;
}

.slider-for:active {
	cursor: grabbing;
}
</style>
<button class="slider-for">Слайдер</button>


Как бы вы перетащили вещь в реальном мире? Сначала ваша рука в расслабленном состоянии (cursor: grab), ничего не хватает. Затем вы сжимаете в ладони предмет (cursor: grabbing), теперь вы можете его переместить на другое место. Затем вы разжимаете ладонь и отпускаете предмет. Рука возвращается в исходное положение. (cursor: grab) Но она готова сжимать и разжимать! Она всегда сжимает какой-то предмет, и находится в расслабленном состоянии, когда ничего не держит. Именно так работает код, который я привёл. Он реален. Там нет яростно сжимающей пустоту руки, и нет руки, перемещающей предмет магическим способом!

madeas 31.10.2018 09:18

Здесь в слайдерах есть подобная реализация на чистом css:hover & :active


Наведение на слайдер: курсор 1
Наведение на блок: курсор 2 (стандартный ховер)
Нажатие на слайдер: курсор 3 (захват) Действует так же при зажиме блока, но курсор не меняется. Откройте консоль, гляньте стили.


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