【问题标题】:Set Font Awesome icons as cursor - is this possible?将 Font Awesome 图标设置为光标 - 这可能吗?
【发布时间】:2014-07-28 09:34:09
【问题描述】:

Font Awesome 有一个非常好的图标集合,可用于 Web 项目。我想使用其中一个图标作为光标(自定义光标)。

据我了解,自定义光标需要一个图片网址,但我无法找到 Font Awesome 图标的图片网址。

【问题讨论】:

  • 我认为您不能为光标指定文本/字体。您可能需要使用 Font Awesome 中所需的图标创建图像,然后将其用于光标 cursor: url(...)
  • 我觉得可以di,先创建一个canvas,然后在上面画fa图标,然后改成base-64的图片,然后引用。我正在尝试编码,等我!
  • 很高兴看到您现有的一些代码。
  • @fish_ball 这听起来像是为了避免事先创建图像而付出了很多努力。虽然听起来是个有趣的挑战,但现在我也想试试
  • 相当相关的jQuery插件:jwarby.github.io/jquery-awesome-cursor

标签: javascript css html html5-canvas font-awesome


【解决方案1】:

知道了!

  1. 创建画布
  2. 在上面画上fa图标
  3. 改成base-64图片url
  4. 在光标css样式上应用图片

我做了一个演示:http://jsfiddle.net/rqq8B/2/

// http://stackoverflow.com/questions/13761472/how-to-render-glyphs-from-fontawesome-on-a-canvas-element
// http://stackoverflow.com/questions/13932291/css-cursor-using-data-uri

$(function() {
    var canvas = document.createElement("canvas");
    canvas.width = 24;
    canvas.height = 24;
    //document.body.appendChild(canvas);
    var ctx = canvas.getContext("2d");
    ctx.fillStyle = "#000000";
    ctx.font = "24px FontAwesome";
    ctx.textAlign = "center";
    ctx.textBaseline = "middle";
    ctx.fillText("\uf002", 12, 12);
    var dataURL = canvas.toDataURL('image/png')
    $('body').css('cursor', 'url('+dataURL+'), auto');
});
body {
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

【讨论】:

  • 在 JSfiddle 中,我看到了自定义元素框架/占位符,但不是实际元素。你是如何加载 fontawesome 元素的?我这样做对吗?我必须在 fontawesome 库的 CDN 链接中添加吗?
  • FontAwesome 中的 "\uf002" 表示类似字符的占位符,更改它 - 比如说 "\uf001" - 你应该会看到不同的光标。
  • 我明白了。我现在在左侧边距的外部资源中看到了 font-awesome.css。我没有看到的是 JSFiddle 中的结果。我看到一个光标的空框.. 哎呀。更新。在 Chrome 浏览器上运行良好,只是在 Firefox (win7) 上运行良好。啊。我讨厌在一种浏览器中运行良好,但在另一种浏览器中运行良好。
  • 在我的 chrome 中也不起作用。我只看到“FL”作为我的光标
  • 我正在尝试使用带有十字准线 arg 而不是 auto 的 fa-crosshairs,但仍然无法将其绘制在图标的中心。 :(
【解决方案2】:

最后,我无法让@fish_ball 的代码可靠地工作,所以我只是downloaded the images,使用gimp 将它们裁剪并编辑为32×32px,并像这样使用它们:

.myClass { cursor: url('/static/img/pencil30_32x32.png') 1 30, crosshair }

1 30 部分将鼠标指针“热点”设置为距图像左侧 1 像素和距图像顶部 30 像素。

【讨论】:

  • 致那些否决我的回答的人:如果您按照说明进行操作并留下评论说明原因,将会很有帮助。如果您有更好的答案,如果您发布它会对每个人都有帮助。不过,@fish_ball 的代码仅适用于某些浏览器,即使使用 标记也是如此。
  • 更多反对票,但仍然没有任何解释! ? 显然很多人不明白社区如何共同努力帮助每个人。
【解决方案3】:

jQuery Awesome Cursor,你可以通过调用一个简单的代码来为你的光标添加字体很棒的图标:

$('body').awesomeCursor('pencil');

或者传递一些选项:

$('body').awesomeCursor('pencil', {
  /* your options here */
  size: 22,
  color: 'orange',
  flip: 'horizontal'
});

免责声明:我不是我刚刚找到的这个库的作者。

【讨论】:

  • 我会补充一点,这个库也适用于其他图标字体(例如 icomoon)
  • 我花了大约一天的研发时间尝试应该强制预加载字体的解决方案,除了jquery-awesome-cursor library
【解决方案4】:

上述canvas方法导致光标模糊。

使用 SVG 可以提供更好的结果:

  • Encharm's Font-Awesome-SVG-PNG 下载您要使用的图标的 SVG。
  • 使用文本编辑器编辑 SVG 并指定您想要使用的宽度和高度
    • 例如:24 x 24。
    • 请记住,浏览器通常有一个最大尺寸(在 Firefox 中为 128 x 128。)
  • 在 CSS 中声明光标,例如:cursor: url( '/assets/img/volume-up.svg' ), pointer;

【讨论】:

  • 我想强调需要调整大小的步骤!
  • SVG 比画布更好,原因有很多。SVG 更具确定性,而画布你必须问,“这是绘制的吗?”,“如果我调整了它的大小,是否重新绘制了?”
【解决方案5】:

对于使用 Vue.js 的任何人,有一个更简单的方法:

将字体真棒图标作为组件导入:

import { library } from '@fortawesome/fontawesome-svg-core';
import { fas } from '@fortawesome/free-solid-svg-icons';
import { fab } from '@fortawesome/free-brands-svg-icons';
import { far } from '@fortawesome/free-regular-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';

library.add(fas);
library.add(fab);
library.add(far);
Vue.component('fa-icon', FontAwesomeIcon);

并直接在页面的 HTML 中使用它:

<fa-icon icon="copy" @click="yourFunction"/>

并用&lt;span&gt;包围您的标签:

<span class="hover"><fa-icon icon="copy" @click="yourFunction"/></span>

并添加到您的 CSS:

span.hover { 
  cursor: pointer; 
}

这将在您的代码中的所有 &lt;span&gt; 标记上添加一个指针 hover 类(因此您的字体真棒图标!)

【讨论】:

  • 当有人将鼠标悬停在带有自定义文本的字体真棒图标上时,我们是否可以显示一个小的工具提示类型的文本?
  • Bootstrap 可以帮助您轻松做到这一点:bootstrap-vue.org/docs/components/tooltip
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 1970-01-01
  • 2015-01-05
  • 2019-12-31
相关资源
最近更新 更多