实现一个下拉不到底的橡皮筋效果
// 获取需要实现橡皮筋效果的元素
const element = document.getElementById('scrollable-element');
// 记录初始触摸位置
let startY = 0;
// 记录当前滚动位置
let currentScroll = 0;
// 橡皮筋拉伸的最大距离
const maxPullDistance = 150;
// 阻尼系数,值越大阻力越大,回弹越慢
const dampingFactor = 0.4;
element.addEventListener('touchstart', (e) => {
startY = e.touches[0].clientY;
currentScroll = element.scrollTop;
});
element.addEventListener('touchmove', (e) => {
const currentY = e.touches[0].clientY;
const deltaY = currentY - startY;
// 如果向下滑动且已经滚动到顶部
if (deltaY > 0 && currentScroll <= 0) {
// 计算拉伸距离
const pullDistance = Math.min(deltaY * dampingFactor, maxPullDistance);
// 设置元素的transform属性,实现下拉橡皮筋效果
element.style.transform = `translateY(${pullDistance}px)`;
// 阻止默认滚动行为
e.preventDefault();
}
// 如果向上滑动且已经滚动到底部
else if (deltaY < 0 && element.scrollTop + element.clientHeight >= element.scrollHeight) {
// 计算拉伸距离
const pullDistance = Math.max(deltaY * dampingFactor, -maxPullDistance);
// 设置元素的transform属性,实现上拉橡皮筋效果
element.style.transform = `translateY(${pullDistance}px)`;
// 阻止默认滚动行为
e.preventDefault();
}
});
element.addEventListener('touchend', () => {
// 手指离开屏幕后,将元素的transform属性重置,实现回弹效果
element.style.transform = 'translateY(0)';
});
HTML 结构示例:
<!DOCTYPE html>
<html>
<head>
<title>Pull to Refresh</title>
<style>
#scrollable-element {
height: 300px; /* 设置一个固定的高度 */
overflow-y: auto; /* 允许内容超出容器时滚动 */
}
.content {
height: 500px; /* 内容高度大于容器高度,才能触发滚动 */
background-color: lightgray;
}
</style>
</head>
<body>
<div id="scrollable-element">
<div class="content">
<!-- 这里放置你的内容 -->
Lots of content here...<br>
...
</div>
</div>
<script src="your-script.js"></script> </body>
</html>
关键点解释:
touchstart事件: 记录初始触摸位置startY和当前滚动位置currentScroll。touchmove事件: 计算手指移动的距离deltaY,并根据滚动位置和移动方向判断是否需要应用橡皮筋效果。Math.min和Math.max: 限制拉伸距离不超过maxPullDistance。transform: translateY(): 通过 CSS 的transform属性实现下拉/上拉的视觉效果。e.preventDefault(): 阻止touchmove事件的默认滚动行为,避免页面同时滚动和拉伸。touchend事件: 手指离开屏幕时,将transform属性重置为translateY(0),实现回弹动画。dampingFactor: 阻尼系数,控制回弹速度和阻力。值越大,阻力越大,回弹越慢。overflow-y: auto;: 确保内容超出容器时可以滚动,这是实现橡皮筋效果的前提。
使用方法:
- 将 JavaScript 代码保存为
your-script.js文件。 - 在 HTML 文件中引入 JavaScript 文件
<script src="your-script.js"></script>。 - 将
#scrollable-element替换为你想要应用橡皮筋效果的元素的 ID。
改进方向:
- 添加过渡效果: 使用 CSS 的
transition属性可以使回弹动画更平滑。 - 自定义回弹动画: 可以使用 JavaScript 动画库或 CSS 动画实现更复杂的回弹效果。
- 结合下拉刷新: 可以
浙公网安备 33010602011771号