我正在为我的网站定制光标设计.我找到了一个我喜欢的设计,并根据我的喜好对其进行了调整.唯一的问题是,当我滚动时,设计也会滚动离开.当我移动鼠标时,它会返回.

const cursor = document.querySelector('.cursor')
document.addEventListener('mousemove', (e) => {
  cursor.setAttribute("style", "top: " + (e.pageY - 60) + "px; left: " + (e.pageX - 60) + "px;")
})

document.addEventListener("click", (e) => {
  console.log(e.target)
  cursor.classList.add('click')

  setTimeout(() => {
    cursor.classList.remove('click')
  }, 500)
})
@import url("https://fonts.googleapis.com/css?family=Montserrat:400,400i,700");
body {
  font-family: Montserrat, sans-serif;
  font-size: 30px;
  background: #000;
  color: #fff;
  cursor: none;
  position: relative;
  min-height: 100vh;
  padding: 0px;
  margin: 0px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

div {
  display: inline-block;
  padding: 20px;
}

.cursor {
  pointer-events: none;
  position: absolute;
  width: 80px;
  height: 80px;
  background: #fff;
  border-radius: 50%;
  mix-blend-mode: exclusion;
  background: radial-gradient(circle, #000 0%, #000 3.99%, #fff 4%, #fff 100%);
}

.cursor.click {
  animation: click .3s ease-in-out;
}

@keyframes click {
  0% {
    transform: scale(1);
  }
  5% {
    transform: scale(1.3);
  }
  100% {
    transform: scale(1);
  }
}
<div class="cursor">
</div>
<h1>Hello world</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec mi nisi, congue at mattis in, fermentum at purus. In venenatis diam eget facilisis pharetra. Nam eget metus gravida nibh consectetur auctor. Nunc dignissim eros nunc, at tempus dui tincidunt quis. 

Mauris augue dui, pretium vel nunc ac, lacinia condimentum est. Maecenas mattis ligula non mi rutrum sodales. Aenean porta augue eget ex convallis, eget pulvinar felis accumsan. Suspendisse lorem nunc, dignissim at sapien eget, condimentum varius enim. 

Duis bibendum sed justo non laoreet. Ut egestas nisi vel interdum viverra. Ut consectetur ex sed sem pretium, convallis egestas tellus elementum. Maecenas libero felis, efficitur nec dolor et, ultrices dignissim magna.</p>
<br>

我曾try 将PageX和Pagey更改为ClientX和ClientY,但如果滚动太远,就会使光标无法恢复.

推荐答案

在您的css中,将.cursorposition: absolute更改为position: fixed

这将确保光标相对于视区,而不是最近的相对定位祖先(滚动不会影响视区,但可能会影响HTML元素,因此在滚动时光标(带position: fixed的)应保持不变)

More details here - w3schools link

另外,你需要在JS中将pageYpageX更改为clientXclientY(因为client不受滚动的影响,而page则会)

Javascript相关问答推荐

序列化我的数据并发送httpPost请求后,控制器收到空参数

jest使用useLocate测试自定义挂钩

JavaScript Date对象在UTC中设置为午夜时显示不正确的日期

使用CDO时如何将Vue组件存储在html之外?

在JS中获取名字和姓氏的首字母

如何提取Cypress中文本

如何通过onClick为一组按钮分配功能;

当promise 在拒绝处理程序被锁定之前被拒绝时,为什么我们会得到未捕获的错误?

从PWA中的内部存储读取文件

使用复选框在d3.js多折线图中添加或删除线条

如何在Javascript中的控制台上以一行形式打印循环的结果

仅针对RTK查询中的未经授权的错误取消maxRetries

如何在模块层面提供服务?

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

覆盖TypeScrip中的Lit-Element子类的属性类型

如何将数组用作复合函数参数?

如何在Press上重新启动EXPO-AV视频?

在渲染turbo流之后滚动到元素

使用Reaction窗体挂钩注册日历组件

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色