javascript - 两个相似的函数怎么写成一个函数?

查看:82
本文介绍了javascript - 两个相似的函数怎么写成一个函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

js代码里面的toLeft和toRight函数。
我的思路是这样的,不知道对不对:点击的时候判断是prev还是next,根据这个传入1或者-1,但是判断prev和next的时候要获取event当前目标,那么toLeft和toRight 就要有一个event参数,这个参数在用addEventListener的时候怎么传?
如果这是错误的,应该怎么做?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>banner</title>
    <!-- <link rel="stylesheet" href="style.css"> -->
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        li {
            list-style-type: none;
        }

        figure {
            overflow: hidden;
            position: relative;

            width: 100%;
            height: 400px;
        }

        ul {
            position: absolute;
            width: calc(100%*4);
            height: 400px;
        }

        li {
            /*position: absolute;*/
            float: left;
            text-align: center;

            width: calc(100%/4);
            height: 400px;
            line-height: 400px;
            
            box-sizing: border-box;
            border: 1px solid #333;
        }

        .ctrl>span {
            position: absolute;
            top: calc(50% - 35px);
            text-align: center;

            width: 40px;
            height: 70px;
            line-height: 70px;


            color: #fff;
            background-color: #eee;
        }

        .prev {
            left: 30px;
        }
        .next {
            right: 30px;
        }

        figure:hover .ctrl>span{
            background-color: #333;
            transition: background-color 1s;
        }

    </style>
</head>
<body>
    <figure>
        <ul>
            <li class="no1">第一张</li>
            <li class="no2">第二张</li>
            <li class="no3">第三张</li>
            <li class="no4">第四张</li>
        </ul>

        <div class="ctrl">
            <span class="next"> > </span>
            <span class="prev"> < </span>
        </div>
    </figure>

    <script>
        window.onload = (function(){
            var num = 0;

            var next = document.querySelector('.next');
            var prev = document.querySelector('.prev');

            var ul = document.querySelector('ul');
            var allLi = document.querySelectorAll('li');
            var liWidth = parseInt(ul.offsetWidth, 10) / allLi.length;

            ul.style.left = 0 + 'px';
            
            function toLeft() {
                num += 1;
                if (num > 3) {
                    num = 0;
                    ul.style.left = 0 + 'px';
                    return false;
                }
                ul.style.left = -num * liWidth + 'px'; 
            }
            function toRight() {
                num -= 1;
                if (num < 0) {
                    num = 3;
                    ul.style.left = -num * liWidth + 'px';
                    return false;
                }
                ul.style.left = -num * liWidth + 'px';
            }

            next.addEventListener('click', toLeft, false);
            prev.addEventListener('click', toRight, false);

        })()
    </script>
</body>
</html>

解决方案

可以的,你思路也没错;如果你要传参数,可以这样

function toLR(nums){
    return function(){
        num+=nums;
        if(num>3){
            num = 0;
            ul.style.left = 0 + 'px';
            return false;
        }else if(num<0){
            num = 3;
            ul.style.left = -num * liWidth + 'px';
            return false;
        }
        ul.style.left = -num * liWidth + 'px'
    }
}
next.addEventListener('click', toLR(1), false);
prev.addEventListener('click', toLR(-1), false);
没测试,不过思路是这样。

这篇关于javascript - 两个相似的函数怎么写成一个函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆