<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>平滑滚动</title>
<style>
/* 第二版 */
.scroll-container {
width: 500px;
overflow: hidden;
border: 1px solid;
}
.scroll-content {
white-space: nowrap;
position: relative;
animation: scroll 6s linear infinite;
display: flex;
width: max-content;
float: left;
}
.scroll-content:hover {
animation-play-state: paused;
}
@keyframes scroll {
0% {
left: 10%;
}
100% {
left: -30%;
}
}
.item {
flex: 0 0 100px;
line-height: 100px;
float: left;
}
</style>
</head>
<body>
<div class="scroll-container">
<div class="scroll-content">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<!-- ... -->
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<!-- ... -->
</div>
</div>
<script src="./js/jquery-3.2.1.min.js"></script>
<script>
var containerWidth = $('.scroll-container').outerWidth();
var contentWidth = $('.scroll-content').outerWidth();
if (contentWidth > containerWidth) {
// $('.scroll-content').clone().appendTo('.scroll-container');
}
else {
$('.scroll-content').css('animation-play-state', 'paused')
}
// 手动滑动
const scrollContainer = document.querySelector('.scroll-container');
let startX = 0;
let scrollLeft = 0;
let isDown = false;
function startDrag(e) {
isDown = true;
startX = e.pageX || e.touches[0].clientX;
scrollLeft = scrollContainer.scrollLeft;
}
function moveDrag(e) {
if (!isDown) return;
e.preventDefault();
const x = e.pageX || e.touches[0].clientX;
const walk = (x - startX) * 2; // 调整滑动速度
let newScrollLeft = scrollLeft - walk;
// 边界检查
newScrollLeft = Math.max(0, newScrollLeft); // 不小于0
newScrollLeft = Math.min(scrollContainer.scrollWidth / 2, newScrollLeft); // 不大于scrollWidth的一半
// 如果滚动到第二个内容列表的开始,立即将滚动位置设置为第一个内容列表的开始
if (newScrollLeft === scrollContainer.scrollWidth / 2) {
newScrollLeft = 0;
}
scrollContainer.scrollLeft = newScrollLeft;
}
function endDrag() {
isDown = false;
}
scrollContainer.addEventListener('mousedown', startDrag);
scrollContainer.addEventListener('mousemove', moveDrag);
scrollContainer.addEventListener('mouseup', endDrag);
scrollContainer.addEventListener('mouseleave', endDrag);
scrollContainer.addEventListener('touchstart', startDrag);
scrollContainer.addEventListener('touchmove', moveDrag);
scrollContainer.addEventListener('touchend', endDrag);
</script>
</body>
</html>
js 实现左右平滑滚动,并且其支持手动滑动,未超出不滚动
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 代码: 效果: 复习弹性布局的各个属性:justify-content:默认值flex-start flex-sh...
- 闲话 Android 图表的绘制,无非是view的绘制,只有掌握了view的绘制流程,那么一个条形图,也没有什么可...
- 如上图,点击新增列,表头新增数据,数据过多,显示滚动条,并且保持在最后面 在页面渲染 完成后,获取dom节点, *...
- 项目中经常会遇到触发事件页面自动滚动到某一位置的情况,一般可以用游标实现,但也有另一种简单的实现思路,利用elem...