用css巧妙实现移动端横向滑动展示功能

11 篇文章 0 订阅

公司需要做一个手机横向滑动的效果,不想用js插件,太麻烦,导入代码也多。所以去网上找了一下,用css就能实现,挺方便的。主要利用了display:-webkit-box来实现。

<!DOCTYPE html>
<html>
<head>
    <title>横向滑动</title>
    <style type="text/css">
        .slide-box{
            margin-top: 200px;
            display: -webkit-box;
            overflow-x: scroll;
            -webkit-overflow-scrolling:touch;
        }
        /*去掉滚动条*/
        .slide-box::-webkit-scrollbar{
            width:0; 
            height:0; 
            display: none;
        }
        .slide-item{
            width: 200px;
            height: 200px;
            border:1px solid #ccc;
            margin-right: 30px;
        }
    </style>
</head>
<body>
    <div class="slide-box">
        <div class="slide-item"></div>
        <div class="slide-item"></div>
        <div class="slide-item"></div>
        <div class="slide-item"></div>
        <div class="slide-item"></div>
    </div>
</body>
</html>

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现移动端touch事件的横向滑动列表效果并循环展示的一种常见方法是使用CSS3的transform属性和JavaScript的Touch事件。 首先,创建一个容器 div,设置其宽度为视口宽度的倍数,如 300%。在容器内部创建多个 div 元素,分别放置需要展示的内容。 然后,通过CSS3的transform属性将容器的位置移动到第二个或第三个 div 元素的位置,使得第一个 div 元素在视口外不可见。 接下来,使用JavaScript监听Touch事件,根据手指在屏幕上的移动距离,通过改变容器的transform属性来实现横向滑动效果。同时,当容器滑动到最后一个 div 元素时,将其位置移动到第一个 div 元素的位置,实现循环展示效果。 下面是一个实现横向循环滑动列表效果的示例代码: HTML: ```html <div class="container"> <div class="item">1</div> <div class="item">2</div> <div class="item">3</div> </div> ``` CSS: ```css .container { width: 300%; display: flex; transition: transform 0.3s ease-in-out; } .item { flex-basis: calc(100% / 3); text-align: center; font-size: 30px; } ``` JavaScript: ```js var container = document.querySelector('.container'); var startX, startY, moveX, moveY, distanceX, distanceY; container.addEventListener('touchstart', function(e) { startX = e.touches[0].clientX; startY = e.touches[0].clientY; }); container.addEventListener('touchmove', function(e) { moveX = e.touches[0].clientX; moveY = e.touches[0].clientY; distanceX = moveX - startX; distanceY = moveY - startY; if (Math.abs(distanceX) > Math.abs(distanceY)) { e.preventDefault(); container.style.transform = 'translateX(' + (-100 / 3 + distanceX / window.innerWidth * 100) + '%)'; } }); container.addEventListener('touchend', function(e) { if (distanceX > 0 && Math.abs(distanceX) > window.innerWidth / 5) { container.style.transform = 'translateX(' + (-200 / 3) + '%)'; } else if (distanceX < 0 && Math.abs(distanceX) > window.innerWidth / 5) { container.style.transform = 'translateX(' + '0' + '%)'; } else { container.style.transform = 'translateX(' + (-100 / 3) + '%)'; } }); container.addEventListener('transitionend', function() { if (container.style.transform === 'translateX(' + (-200 / 3) + '%)') { container.style.transition = 'none'; container.style.transform = 'translateX(' + (-100 / 3) + '%)'; setTimeout(function() { container.style.transition = 'transform 0.3s ease-in-out'; }, 0); } else if (container.style.transform === 'translateX(' + '0' + '%)') { container.style.transition = 'none'; container.style.transform = 'translateX(' + (-100 / 3 * 2) + '%)'; setTimeout(function() { container.style.transition = 'transform 0.3s ease-in-out'; }, 0); } }); ``` 在这个示例中,我们使用了Flex布局和CSS3的calc()函数来创建了一个横向排列的列表。Touch事件监听了用户的滑动操作,通过改变容器的transform属性来实现横向滑动效果。当滑动到最后一个 div 元素时,通过修改transform属性实现循环展示效果。同时,我们还添加了一些防抖和节流的优化,使得滑动效果更加流畅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值