You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在滚动class为elementor的div时旋转固定定位元素

实现div内部滚动触发固定元素旋转的方案

问题核心原因

  • scrollY 是 window全局对象 的专属属性,仅能获取整个浏览器页面的滚动距离,普通DOM元素不存在该属性,因此初始代码无法正确读取elementor容器的滚动偏移量
  • DOM元素的内部垂直滚动距离需要使用scrollTop属性获取,你后续的修改逻辑完全正确

完整可运行代码

HTML代码

<!-- 待旋转的固定定位图片 -->
<img class="portfolio" id="rotatelogo" src="http://jakobnatorp.com/wp-content/uploads/2021/10/cropped-JAKOB-LERCHE-DAA-NATORP.png"/>
<!-- 滚动触发容器 -->
<div class="elementor">
  <!-- 此处放置容器内部需要滚动的内容 -->
</div>

CSS代码

.portfolio {
  position: fixed;
  width: 150px;
  height: 150px;
  margin-top: 50px;
  margin-bottom: -300px;
  margin-left: 50px;
  /* 可选:固定旋转中心点,避免旋转时出现位置偏移 */
  transform-origin: center;
}  

.elementor {
  width: 100vh;
  height: 100vw;
  overflow-x: scroll;
  overflow-y: scroll;
  transform: rotate(-90deg) translateX(-100vh);
  transform-origin: top left;
  -ms-overflow-style: none;
}
/* 可选:适配webkit内核浏览器隐藏滚动条 */
.elementor::-webkit-scrollbar {
  display: none;
}

最终JS代码

// 获取滚动容器和待旋转元素
const element = document.querySelector('.elementor');
const rotateLogo = document.getElementById('rotatelogo');

// 监听容器滚动事件
element.addEventListener('scroll', () => {
  // 滚动距离乘以系数可控制旋转速度,数值越大旋转越快
  const rotateDeg = element.scrollTop * 0.25;
  rotateLogo.style.transform = `translateX(-50%) translateY(-50%) rotate(${rotateDeg}deg)`;
});

可选优化点

  • 可添加节流函数限制滚动事件触发频率,减少不必要的性能消耗
  • 若需要适配横向滚动触发旋转,可将scrollTop替换为scrollLeft属性

内容的提问来源于stack exchange,提问作者Jakob Natorp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:09:00