用于捕获光标的CSS(拖放)


170

我有一个JavaScript webapp,用户需要抓住背景才能移动整个屏幕。因此,我希望光标悬停在背景上时进行更改。在-moz-grab-moz-grabbingCSS光标是非常理想的。当然,它们仅在Firefox中工作...其他浏览器是否具有等效的游标?我是否需要做一些比标准CSS游标更多的自定义操作?

Answers:


106

我认为move这可能是您正在执行的最接近的标准光标值

move
表示要移动的东西。


1
我看到了移动图标,以为抓取图标更好。但是,既然您指出了w3c,它就将游标“指示要移动的东西”视为最有意义。谢谢。
在。

2
@at:您可以在逗号分隔的列表中指定多个游标,并且用户代理应使用它理解的第一个游标。因此,您可以使用-moz *并“移动”作为后备。
亩太短了,

14
@muistooshort您确定逗号列表仍然有效吗?我使用cursor:move; cursor:-webkit-grab; cursor:-moz-grab; cursor:grab;最喜欢的最后一个。
鲍勃·斯坦因

2
@ BobStein-VisiBone:我认为几年前可能会有一些困惑。据我所知逗号名单作品,如果你指定多种格式的喜欢cursor: url(example.svg#linkcursor), url(hyper.cur), pointer,而不是多个可能的值。我认为您的做法可能是必要的。
亩太短了

417

万一其他人偶然发现了这个问题,这可能是您想要的:

.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
由于某些原因,“抓取”仅在我释放鼠标时出现。知道为什么会这样吗?
乔纳2016年

@Jona我的猜测是您没有将grabbable类添加到任何可以抓取的元素中,并且在拖动类时切换了类。
Emile Bergeron

1
很好的扩展答案,感谢您添加额外的“抓取”位。不错的感觉。:)
苏格兰人

1
对于任何对此解决方案有疑问的人,我必须将grab光标设置为开,:hover而不是使用普通选择器,即.grabbable:hover在上面的示例中。
Markus Amalthea Magnuson

@Jona在父母中添加了这些样式,<ul>而不是<li>在我看来解决了这个问题
Arthur Tarasov

52

现在允许使用CSS3grabgrabbing的值cursor。为了提供跨浏览器兼容性3的多个后备功能,包括自定义光标文件,一个完整的解决方案如下所示:

.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;
}

更新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
您的帖子是J.Steve的副本

9
@ user2230470它在两个重要方面有所不同:首先,它为不支持的浏览器提供了光标图像,但为光标图像提供了光标图像grab。其次,最佳实践是在供应商前缀值之后使用标准语法。
Volker E.

真?!怎么会?此外,在哪里可以找到更多类似标准惯例的信息。

8
@ user2230470-因为在浏览器支持两种行为的情况下,前缀之一可能已在标准版本的定稿之前稍晚实施(因此可能会有所不同),所以您希望它使用标准版本...而无论定义如何LAST是浏览器将使用的那个。因此,标准的应该排在最后。
Jimbo Jonny

3
images/grab.cur我需要在Web服务器上托管的图像的示例URL,还是一些神奇的IE?
Jon z

11

“比CSS游标更自定义”意味着某种类型的插件,但是您可以使用CSS完全指定自己的游标。我认为此清单符合您的要求:

.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>

来源:CSS游标属性@ W3Schools


5

您可以创建自己的游标,并使用来将其设置为游标cursor: url('path-to-your-cursor');,或者找到Firefox并进行复制(奖金:在每个浏览器中都保持一致的外观)。


5

我可能会迟到,但是您可以尝试以下代码,该代码对拖放有效。

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

}

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

您可以在上面的URL中使用下面的图像。确保它是PNG透明图像。如果没有,请从Google下载一个。

在此处输入图片说明 在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.