【问题标题】:two circles should follow the cursor – one small and one big (with delay)两个圆圈应该跟随光标——一个小圆圈和一个大圆圈(有延迟)
【发布时间】:2018-01-29 20:54:23
【问题描述】:

我现在在一些网站上看到了这种趋势,默认光标被替换为新光标——在很多情况下是圆圈

这些光标是交互式的——交互式我的意思是当悬停一个 a-tag 时它会改变大小和颜色。

在这个网站上:https://en.leviev-group.com/你可以看到我想要的光标效果。

我试过做一支笔,但它不能正常工作:https://codepen.io/anon/pen/VQwdBv?q=cursor&limit=all&type=type-pens

<div id="cursor">
<div id="circle-big"></div>
<div id="circle"></div>
</div>

我希望中间的圆圈作为光标,周围的大圆圈延迟跟随光标。 当悬停 a-tag 时,它应该环绕 a-tag,类似于网站上的示例。如果可能的话,用 javascript 和 css 制作

这怎么可能?

【问题讨论】:

  • 我不知道你为什么不使用 cursor 属性而不是使用 div 来实现光标。无论如何,但你在正确的轨道上;将#circle 更改为 position:absolute 并将生成的坐标更改为 d.pageX 和 d.pageY 会有很长的路要走。
  • 您不需要将图像添加到光标属性以使其工作吗?

标签: javascript html css cursor


【解决方案1】:

你几乎很好,只需让两个元素的行为相同,并通过在小元素上添加过渡,你会使其变慢并创建跟随效果。

$('body').mouseover(function() {
  $(this).css({
    cursor: 'none'
  });
});

$(document).on('mousemove', function(e) {
  $('#circle-big').css({
    left: e.pageX,
    top: e.pageY
  });
  $('#circle').css({
    left: e.pageX,
    top: e.pageY
  });

});
#circle-big {
  display: block;
  position: absolute;
  margin-top: -30px;
  margin-left: -30px;
  width: 60px;
  height: 60px;
  z-index: -1;
  text-align: center;
  border: 2px solid red;
  border-radius: 50%;
}

#circle {
  display: block;
  position: absolute;
  margin: auto;
  transition: all 1s linear;
  width: 15px;
  height: 15px;
  margin-top: -7.5px;
  margin-left: -7.5px;
  z-index: -1;
  background-color: rgba(255, 0, 0, 0.5);
  border-radius: 50%;
  box-shadow: 0px 0px 10px 4px rgba(255, 255, 255, 1);
}

a {
  font-size: 26px;
  text-align: center;
  margin: 100px auto;
  display: block;
}

a:hover {
  font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cursor">
  <div id="circle-big"></div>
  <div id="circle"></div>
</div>

<a>link</a>

如果你想让大的跟随小的,或者改变过渡:

$('body').mouseover(function() {
  $(this).css({
    cursor: 'none'
  });
});

$(document).on('mousemove', function(e) {
  $('#circle-big').css({
    left: e.pageX,
    top: e.pageY
  });
  $('#circle').css({
    left: e.pageX,
    top: e.pageY
  });

});
#circle-big {
  display: block;
  position: absolute;
  margin-top: -30px;
  margin-left: -30px;
  transition: all 1s linear;
  width: 60px;
  height: 60px;
  z-index: -1;
  text-align: center;
  border: 2px solid red;
  border-radius: 50%;
}

#circle {
  display: block;
  position: absolute;
  margin: auto;
  width: 15px;
  height: 15px;
  margin-top: -7.5px;
  margin-left: -7.5px;
  z-index: -1;
  background-color: rgba(255, 0, 0, 0.5);
  border-radius: 50%;
  box-shadow: 0px 0px 10px 4px rgba(255, 255, 255, 1);
}

a {
  font-size: 26px;
  text-align: center;
  margin: 100px auto;
  display: block;
}

a:hover {
  font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cursor">
  <div id="circle-big"></div>
  <div id="circle"></div>
</div>

<a>link</a>

更新

如果你想在悬停链接时改变光标,你可以考虑链接标签上的事件。

这是一个简单的例子:

$('body').mouseover(function() {
  $(this).css({
    cursor: 'none'
  });
});

$(document).on('mousemove', function(e) {
  $('#circle-big').css({
    left: e.pageX,
    top: e.pageY
  });
  $('#circle').css({
    left: e.pageX,
    top: e.pageY
  });
});
$('a').mouseover(function() {
  $('#cursor').addClass('on-link');
})
$('a').mouseout(function() {
  $('#cursor').removeClass('on-link');
})
#circle-big {
  display: block;
  position: absolute;
  margin-top: -30px;
  margin-left: -30px;
  transition: all 1s linear;
  width: 60px;
  height: 60px;
  z-index: -1;
  text-align: center;
  border: 2px solid red;
  border-radius: 50%;
}

#circle {
  display: block;
  position: absolute;
  margin: auto;
  width: 15px;
  height: 15px;
  margin-top: -7.5px;
  margin-left: -7.5px;
  background-color: rgba(255, 0, 0, 0.5);
  border-radius: 50%;
  z-index: -1;
  box-shadow: 0px 0px 10px 4px rgba(255, 255, 255, 1);
}

#cursor.on-link #circle-big {
  border: 2px solid blue;
}

a {
  font-size: 26px;
  text-align: center;
  margin: 100px auto;
  display: block;
}

a:hover {
  font-size: 30px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="cursor">
  <div id="circle-big"></div>
  <div id="circle"></div>
</div>

<a>link</a>

【讨论】:

  • 啊,好吧——最后一个例子似乎走在了正确的道路上,但是如何做到这一点,所以悬停链接时大圆圈会扩大?
  • @DWTBC 对于第二个功能,您可以在链接的 mousehover/mouseout 上添加事件,并更改圆圈的 CSS 以使其更大或任何其他样式.. 我要编写代码 ;)
  • @DWTBC 添加了一个您可以改进的简单示例;)
猜你喜欢
  • 2018-12-15
  • 1970-01-01
  • 2021-06-24
  • 2011-03-10
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
相关资源
最近更新 更多