js实现向上、向下、向左、向右无缝滚动

向左滚动

在这里插入图片描述

<!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>
        * {
            margin: 0;
            padding: 0;

        }

        #wrapper {
            cursor: pointer;
            width: 600px;
            height: 200px;
            border: 1px solid pink;
            overflow: hidden;
            display: flex;
            margin: auto;
        }

        .scroll_content {
            display: flex;
        }

        #list,
        #list1 {
            display: flex;
        }

        .item {
            width: 200px;
            height: 200px;
            flex-shrink: 0;

        }
        .item img{
            width: 100%;
        }
        .item:nth-child(odd) {
            background: skyblue;
        }

        .item:nth-child(even) {
            background: yellow;
        }
    </style>
</head>

<body>
    <!-- 外层盒子 -->
    <div id="wrapper">
        <!-- 滚动盒子 -->
        <div id="scroll_content" class="scroll_content">
            <!-- 列表1 -->
            <div id="list">
                <div class="item">
                    <img src="../imgs/city1.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city2.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city3.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city4.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city5.png" alt="">
                </div>
            </div>
            <!-- 复制一份 -->
            <div id="list1">
            </div>
        </div>
    </div>
    <script>
        window.onload = function () {

            var speed = 10;
            var tab = document.getElementById("wrapper");
            var tab1 = document.getElementById("list");
            var tab2 = document.getElementById("list1");
            tab2.innerHTML = tab1.innerHTML;
            function Marquee() {
                if (tab2.offsetWidth - tab.scrollLeft <= 0)
                    tab.scrollLeft -= tab1.offsetWidth
                else {
                    tab.scrollLeft++;
                }
            }
            var MyMar = setInterval(Marquee, speed);
            tab.onmouseover = function () { clearInterval(MyMar) };
            tab.onmouseout = function () { MyMar = setInterval(Marquee, speed) };
        }
    </script>
</body>

</html>
向右滚动

在这里插入图片描述

<!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>
        * {
            margin: 0;
            padding: 0;

        }

        #wrapper {
            cursor: pointer;
            width: 600px;
            height: 200px;
            border: 1px solid pink;
            overflow: hidden;
            display: flex;
            margin: auto;
        }

        .scroll_content {
            display: flex;
        }

        #list,
        #list1 {
            display: flex;
        }

        .item {
            width: 200px;
            height: 200px;
            flex-shrink: 0;

        }
        .item img{
            width: 100%;
        }

        .item:nth-child(odd) {
            background: skyblue;
        }

        .item:nth-child(even) {
            background: yellow;
        }

        #list1 .item:last-child {
            background: red;
        }
    </style>
</head>

<body>
    <!-- 外层盒子 -->
    <div id="wrapper">
        <!-- 滚动盒子 -->
        <div id="scroll_content" class="scroll_content">
            <!-- 列表1 -->
            <div id="list">
                <div class="item">
                    <img src="../imgs/city1.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city2.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city3.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city4.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city5.png" alt="">
                </div>
            </div>
            <!-- 复制一份 -->
            <div id="list1">
            </div>
        </div>
    </div>
    <script>
        window.onload = function () {

            var speed = 10;
            var tab = document.getElementById("wrapper");
            var tab1 = document.getElementById("list");
            var tab2 = document.getElementById("list1");
            tab2.innerHTML = tab1.innerHTML;
            function Marquee() {
                if (tab.scrollLeft <= 0) {
                    tab.scrollLeft += tab2.offsetWidth
                }
                else {
                    tab.scrollLeft--;
                }
                
                console.log(tab.scrollLeft, tab2.offsetWidth);
            }
            var MyMar = setInterval(Marquee, speed);
            tab.onmouseover = function () { clearInterval(MyMar) };
            tab.onmouseout = function () { MyMar = setInterval(Marquee, speed) };
        }
    </script>
</body>

</html>
向上滚动

在这里插入图片描述

<!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>
        * {
            margin: 0;
            padding: 0;
        }

        #wrapper {
            width: 200px;
            height: 600px;
            overflow: hidden;
            margin: 10px;
        }

        .item {
            width: 200px;
            height: 200px;
        }
        .item img{
            width: 100%;
        }
        .item:nth-child(odd) {
            background: skyblue;
        }

        .item:nth-child(even) {
            background: pink;
        }
    </style>
</head>

<body>
    <div id="wrapper">
        <div class="scroll_content">
            <div id="list">
                <div class="item">
                    <img src="../imgs/city1.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city2.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city3.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city4.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city5.png" alt="">
                </div>
            </div>
            <div id="list1"></div>
        </div>
    </div>
    <script>
        var speed = 10; //数字越大速度越慢
        var wrapper = document.getElementById("wrapper");
        var list = document.getElementById("list");
        var list1 = document.getElementById("list1");
        list1.innerHTML = list.innerHTML; //克隆list为list1
        function Marquee() {
            if (list1.offsetTop - wrapper.scrollTop <= 0)
                wrapper.scrollTop -= list.offsetHeight 
            else {
                wrapper.scrollTop++
            }
        }
        var MyMar = setInterval(Marquee, speed);
        wrapper.onmouseover = function () { clearInterval(MyMar) };
        wrapper.onmouseout = function () { MyMar = setInterval(Marquee, speed) };
    </script>
</body>

</html>
向下滚动

在这里插入图片描述

<!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>
        * {
            margin: 0;
            padding: 0;
        }

        #wrapper {
            width: 200px;
            height: 600px;
            overflow: hidden;
            margin: 10px;
            cursor: pointer;
        }

        .item {
            width: 200px;
            height: 200px;
        }
        .item img{
            width: 100%;
        }
        .item:nth-child(odd) {
            background: skyblue;
        }

        .item:nth-child(even) {
            background: pink;
        }
    </style>
</head>

<body>
    <div id="wrapper">
        <div class="scroll_content">
            <div id="list">
                <div class="item">
                    <img src="../imgs/city1.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city2.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city3.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city4.png" alt="">
                </div>
                <div class="item">
                    <img src="../imgs/city5.png" alt="">
                </div>
            </div>
            <div id="list1"></div>
        </div>
    </div>
    <script>
        var speed = 10; //数字越大速度越慢
        var tab = document.getElementById("wrapper");
        var tab1 = document.getElementById("list");
        var tab2 = document.getElementById("list1");
        tab2.innerHTML = tab1.innerHTML; 
        tab.scrollTop = tab.scrollHeight
        function Marquee() {
            if (tab1.offsetTop - tab.scrollTop >= 0)
                tab.scrollTop += tab2.offsetHeight 
            else {
                tab.scrollTop--
            }
        }
        var MyMar = setInterval(Marquee, speed);
        tab.onmouseover = function () { clearInterval(MyMar) };
        tab.onmouseout = function () { MyMar = setInterval(Marquee, speed) };
    </script>
</body>

</html>
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
在Vue3中,可以使用`ref`来获取DOM元素的引用,然后监听键盘事件来实现元素的选择。 例如,我们可以为需要选择的元素添加`ref`属性: ```html <template> <div> <div ref="item1">Item 1</div> <div ref="item2">Item 2</div> <div ref="item3">Item 3</div> </div> </template> ``` 然后在`mounted`钩子函数中,通过`$refs`来获取DOM元素的引用,并监听`keydown`事件: ```javascript export default { mounted() { const items = this.$refs; let selected = 0; // 当前选中的元素索引 const length = Object.keys(items).length; // 元素的总数 // 监听键盘事件 document.onkeydown = (event) => { if (event.keyCode === 37) { // 向箭头 selected = selected === 0 ? length - 1 : selected - 1; items[`item${selected + 1}`].scrollIntoView({ behavior: "smooth", block: "center" }); } else if (event.keyCode === 38) { // 向上箭头 selected = selected === 0 ? length - 1 : selected - 1; items[`item${selected + 1}`].scrollIntoView({ behavior: "smooth", block: "center" }); } else if (event.keyCode === 39) { // 向箭头 selected = selected === length - 1 ? 0 : selected + 1; items[`item${selected + 1}`].scrollIntoView({ behavior: "smooth", block: "center" }); } else if (event.keyCode === 40) { // 向下箭头 selected = selected === length - 1 ? 0 : selected + 1; items[`item${selected + 1}`].scrollIntoView({ behavior: "smooth", block: "center" }); } }; }, }; ``` 在上述代码中,我们通过`scrollIntoView`方法来将选中的元素滚动到可视区域中心。当然,你也可以根据需要实现其他的选择逻辑。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃葡萄不吐葡萄皮嘻嘻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值