CSS do pobierania kursorów (przeciągnij i upuść)


170

Mam aplikację internetową JavaScript, w której użytkownik musi chwycić tło, aby przesunąć cały ekran. Dlatego chcę, aby kursor zmieniał się, gdy najeżdżają na tło. -moz-grabI -moz-grabbingkursory CSS są idealne do tego celu. Oczywiście działają tylko w przeglądarce Firefox ... czy istnieją równoważne kursory dla innych przeglądarek? Czy muszę zrobić coś bardziej niestandardowego niż standardowe kursory CSS?

Odpowiedzi:


106

Myślę, moveże prawdopodobnie byłaby to najbliższa standardowa wartość kursora dla tego, co robisz:

move
Wskazuje, że coś ma zostać przeniesione.


1
Widziałem ikonę ruchu, pomyślałem, że ikona chwytania jest lepsza. Ale teraz, kiedy wskazałeś, w3c uważa, że ​​kursor „Wskazuje, że coś ma zostać przesunięte”, ma to największy sens. Dzięki.
— godz.

2
@at: możesz określić wiele kursorów na liście rozdzielanej przecinkami, a agent użytkownika powinien użyć pierwszego, który zrozumie. Możesz więc użyć -moz * one i „move” jako rezerwy.
— mu jest za krótkie

14
@muistooshort Czy na pewno lista przecinków nadal działa? Używam cursor:move; cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;z najbardziej preferowanym ostatnim.
— Bob Stein

2
@ BobStein-VisiBone: Myślę, że kilka lat temu mogło dojść do zamieszania. AFAIK lista przecinków działa, jeśli określasz wiele formatów, takich jak cursor: url(example.svg#linkcursor), url(hyper.cur), pointerzamiast wielu możliwych wartości. Myślę, że twoje podejście może być konieczne.
— mu jest za krótkie

417

Na wypadek, gdyby ktoś inny natknął się na to pytanie, prawdopodobnie właśnie tego szukałeś:

.grabbable {
    cursor: move; /* fallback if grab cursor is unsupported */
    cursor: grab;
    cursor: -moz-grab;
    cursor: -webkit-grab;
}

 /* (Optional) Apply a "closed-hand" cursor during drag operation. */
.grabbable:active {
    cursor: grabbing;
    cursor: -moz-grabbing;
    cursor: -webkit-grabbing;
}

44
z jakiegoś powodu „chwytanie” pojawia się tylko wtedy, gdy puszczam mysz. jakiś pomysł, dlaczego tak jest?
— Jona

@Jona Domyślam się, że nie dodałeś grabbableklasy do żadnego elementu, który można złapać, a przełączasz klasę, gdy są przeciągane.
— Emile Bergeron

1
ładna rozszerzona odpowiedź, dzięki za dodanie dodatkowego „chwytającego” kawałka. miły dotyk. :)
— scotself

1
Dla każdego, kto miał problem z tym rozwiązaniem, musiałem ustawić grabkursor :hoverraczej na niż zwykły selektor, czyli .grabbable:hoverw powyższym przykładzie.
— Markus Amalthea Magnuson

@Jona dodanie tych stylów do rodzica <ul>zamiast <li>w moim przypadku rozwiązało problem
— Arthur Tarasov

52

CSS3 grab i grabbingteraz są dozwolone wartości cursor. Aby zapewnić kilka alternatywnych rozwiązań zapewniających zgodność z różnymi przeglądarkami 3, w tym niestandardowe pliki kursorów, kompletne rozwiązanie wyglądałoby tak:

.draggable {
    cursor: move; /* fallback: no `url()` support or images disabled */
    cursor: url(images/grab.cur); /* fallback: Internet Explorer */
    cursor: -webkit-grab; /* Chrome 1-21, Safari 4+ */
    cursor:    -moz-grab; /* Firefox 1.5-26 */
    cursor:         grab; /* W3C standards syntax, should come least */
}

.draggable:active {
    cursor: url(images/grabbing.cur);
    cursor: -webkit-grabbing;
    cursor:    -moz-grabbing;
    cursor:         grabbing;
}

Aktualizacja 2019-10-07:

.draggable {
    cursor: move; /* fallback: no `url()` support or images disabled */
    cursor: url(images/grab.cur); /* fallback: Chrome 1-21, Firefox 1.5-26, Safari 4+, IE, Edge 12-14, Android 2.1-4.4.4 */
    cursor: grab; /* W3C standards syntax, all modern browser */
}

.draggable:active {
    cursor: url(images/grabbing.cur);
    cursor: grabbing;
}

1
Twój post jest duplikatem artykułu J.Steve

9
@ user2230470 Różni się w dwóch ważnych punktach: Po pierwsze, zapewnia obraz kursora dla przeglądarek nie obsługujących grab, ale obrazy kursorów. Po drugie, najlepszą praktyką jest umieszczanie składni standardów po prefiksach dostawcy.
— Volker E.

naprawdę?! dlaczego? gdzie mogę znaleźć więcej informacji na temat podobnych praktyk.

8
@ user2230470 - ponieważ w przypadkach, gdy przeglądarka obsługuje 2 zachowania, w których prefiks mógł zostać zaimplementowany nieco przed finalizacją standardowego (i dlatego może działać inaczej), chcesz, aby używał standardowego ... i jakakolwiek definicja przyjdzie OSTATNI to ten, którego będzie używać przeglądarka. Dlatego standard powinien być ostatni.
— Jimbo Jonny

3
to images/grab.curprzykładowy adres URL obrazu, który muszę umieścić na serwerze sieciowym, czy może to jakaś magiczna rzecz w IE?
— Jon z

11

„Bardziej niestandardowe” niż kursory CSS oznacza wtyczkę pewnego typu, ale możesz całkowicie określić własne kursory za pomocą CSS. Myślę, że ta lista ma to, czego chcesz:

.alias {cursor: alias;}
.all-scroll {cursor: all-scroll;}
.auto {cursor: auto;}
.cell {cursor: cell;}
.context-menu {cursor: context-menu;}
.col-resize {cursor: col-resize;}
.copy {cursor: copy;}
.crosshair {cursor: crosshair;}
.default {cursor: default;}
.e-resize {cursor: e-resize;}
.ew-resize {cursor: ew-resize;}
.grab {cursor: grab;}
.grabbing {cursor: grabbing;}
.help {cursor: help;}
.move {cursor: move;}
.n-resize {cursor: n-resize;}
.ne-resize {cursor: ne-resize;}
.nesw-resize {cursor: nesw-resize;}
.ns-resize {cursor: ns-resize;}
.nw-resize {cursor: nw-resize;}
.nwse-resize {cursor: nwse-resize;}
.no-drop {cursor: no-drop;}
.none {cursor: none;}
.not-allowed {cursor: not-allowed;}
.pointer {cursor: pointer;}
.progress {cursor: progress;}
.row-resize {cursor: row-resize;}
.s-resize {cursor: s-resize;}
.se-resize {cursor: se-resize;}
.sw-resize {cursor: sw-resize;}
.text {cursor: text;}
.url {cursor: url(https://www.w3schools.com/cssref/myBall.cur),auto;}
.w-resize {cursor: w-resize;}
.wait {cursor: wait;}
.zoom-in {cursor: zoom-in;}
.zoom-out {cursor: zoom-out;}
<h1>The cursor Property</h1>
<p>Hover mouse over each to see how the cursor looks</p>

<p class="alias">cursor: alias</p>
<p class="all-scroll">cursor: all-scroll</p>
<p class="auto">cursor: auto</p>
<p class="cell">cursor: cell</p>
<p class="context-menu">cursor: context-menu</p>
<p class="col-resize">cursor: col-resize</p>
<p class="copy">cursor: copy</p>
<p class="crosshair">cursor: crosshair</p>
<p class="default">cursor: default</p>
<p class="e-resize">cursor: e-resize</p>
<p class="ew-resize">cursor: ew-resize</p>
<p class="grab">cursor: grab</p>
<p class="grabbing">cursor: grabbing</p>
<p class="help">cursor: help</p>
<p class="move">cursor: move</p>
<p class="n-resize">cursor: n-resize</p>
<p class="ne-resize">cursor: ne-resize</p>
<p class="nesw-resize">cursor: nesw-resize</p>
<p class="ns-resize">cursor: ns-resize</p>
<p class="nw-resize">cursor: nw-resize</p>
<p class="nwse-resize">cursor: nwse-resize</p>
<p class="no-drop">cursor: no-drop</p>
<p class="none">cursor: none</p>
<p class="not-allowed">cursor: not-allowed</p>
<p class="pointer">cursor: pointer</p>
<p class="progress">cursor: progress</p>
<p class="row-resize">cursor: row-resize</p>
<p class="s-resize">cursor: s-resize</p>
<p class="se-resize">cursor: se-resize</p>
<p class="sw-resize">cursor: sw-resize</p>
<p class="text">cursor: text</p>
<p class="url">cursor: url</p>
<p class="w-resize">cursor: w-resize</p>
<p class="wait">cursor: wait</p>
<p class="zoom-in">cursor: zoom-in</p>
<p class="zoom-out">cursor: zoom-out</p>

Źródło: kursor CSS Property @ W3Schools


5

Możesz stworzyć własne kursory i ustawić je jako kursor za pomocą cursor: url('path-to-your-cursor');lub znaleźć Firefox i skopiować je (bonus: ładny, spójny wygląd w każdej przeglądarce).


5

Mogę się spóźnić, ale możesz wypróbować poniższy kod, który działał dla mnie w przypadku Drag and Drop.

.dndclass{
    cursor: url('../images/grab1.png'), auto; 

}

.dndclass:active {
    cursor: url('../images/grabbing1.png'), auto;
}

Możesz użyć poniższych zdjęć w powyższym adresie URL. Upewnij się, że jest to przezroczysty obraz PNG. Jeśli nie, pobierz go z Google.

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.