斌斌学院JS-task5

作者: fenerchen | 来源:发表于2017-08-31 11:06 被阅读13次

任务目的

  • 学习与实践JavaScript的基本语法、语言特性
  • 练习使用JavaScript实现简单的排序算法

任务描述

  • 基于上一任务
  • 限制输入的数字在10-100
  • 队列元素数量最多限制为60个,当超过60个时,添加元素时alert出提示
  • 队列展现方式变化如图,直接用高度表示数字大小
  • 实现一个简单的排序功能,如冒泡排序(不限制具体算法),用可视化
    的方法表达出来,参考见下方参考资料

任务注意事项

  • 实现简单功能的同时,请仔细学习JavaScript基本语法、事件、DOM相关的知识
  • 请注意代码风格的整齐、优雅
  • 代码中含有必要的注释
  • 示例图仅为参考,不需要完全一致
  • 具体算法及可视化的形式不做特别限制,只要求能够展现出算法的过程
  • 建议不使用任何第三方库、框架

实现思路

获取输入框中的数字,有in单击事件发生时创建孩子元素child,若数字合法添加孩子元素并将数字存入数组number[];out单击事件发生时,移除对应的child,并删除number[]中对应数字。sort单击事件发生时,对number的复制体排序,并显示在页面上。

Html代码

<label>请输入数字:
    <input id ='input' type="text" name="text" class="input"></label>
    <button id='left-in' class='in'><a href="###" class="hover">上侧入</a></button>
    <button id='right-in' class='in'><a href="###" class="hover">下侧入</a></button>
    <button id='left-out' class='out'><a href="###" class="hover">上侧出</a></button>
    <button id='right-out' class='out'><a href="###" class="hover">下侧出</a></button>
    <button id='sort_button'><a href="###" class="hover">排序</a></button>

<p>请查看输出:</p>
<div id='list'></div>
<div id='sort'></div>

Css代码

#sort_button,.input, .in,.out{
    background: #fff;
    border: 1px solid #e8e8e8;
    height:20px;
}
a{
    text-decoration:none;
    color:#000;
}
a:hover{
    color: #fc0000;
}
#left-out{
    margin:0 0 0 20px;
}
.in,.out{
    cursor:pointer;
}
#sort_button{
    margin: 0 0 0 20px;
}
#list{
    height:1000px;
    width:550px;
    float: left;
}
.display{
    display: block;
    height: 20px;
    margin: 8px 8px;
    background-color: #f00;
    color: #fff;
    line-height: 20px;
    cursor:pointer;
}
#sort{
    height:1000px;
    width:550px;
    float: right;
}

JS代码

var input = document.getElementById('input');
    var left_in = document.getElementById("left-in");
    var left_out = document.getElementById("left-out");
    var list_num = document.getElementById("list");
    var right_in = document.getElementById("right-in");
    var right_out = document.getElementById("right-out");
    var sort_button = document.getElementById("sort_button");
    var sort = document.getElementById("sort");
    var in_in = document.getElementsByClassName('in');
    var count = 0;
    var number = [];
    var flag_in = '';
    var flag_out = '';

    //添加数字
    right_in.onclick = function() {
        flag_in = 'right';
        in_();
    };
    left_in.onclick = function() {
        flag_in = 'left';
        in_();
    };
    //移除数字
    left_out.onclick = function() {
        flag_out = 'left';
        out();
    }
    right_out.onclick = function() {
        flag_out = 'right';
        out();
    }
    //点击数字删除
    list_num.onmouseover = function() {
            for (var i = 0; i < list_num.children.length; i++) {
                (function(n) {
                    list_num.children[n].onclick = function() {
                        list_num.removeChild(this);
                        number.splice(n,1);
                        ///alert(n);
                    }
                })(i)//创建闭包,传递index
            }
        }
        //点击排序
    sort_button.onclick = function() {
            sort.innerHTML = '';
            var num = number.slice();//复制number,操作num
            for (var i = 0; i < num.length; i++) {
                for (var j = 0; j < num.length - 1 - i; j++) {
                    if (num[j] > num[j + 1]) {
                        var temp = num[j];
                        num[j] = num[j + 1];
                        num[j + 1] = temp;
                    }
                }
                var add_sort = document.createElement('span')
                add_sort.className = 'display';
                add_sort.style.width = 20 + 5 * num[num.length - 1 - i] + 'px';
                add_sort.innerHTML = num[num.length - 1 - i];
                sort.appendChild(add_sort);
            }
        }
        //移除数字
    var out = function() {
        if (list_num.children.length > 0) {
            if (flag_out === 'left') {
                number.shift();
                list_num.removeChild(list_num.children[0]);
            }
            if (flag_out === 'right') {
                number.pop()
                list_num.removeChild(list_num.lastElementChild);
            }
        } else
            alert('没有数字了');
    }
//输入
    var in_ = function() {
        var value = input.value;
        var add = document.createElement('span')
        add.className = 'display';
        if (value >= 10 && value <= 100 && count <= 60) {
            add.style.width = 20 + 5 * value + 'px';
            add.innerHTML = value;
            if (flag_in === 'right') {
                list_num.appendChild(add);
                number.push(value);
            }
            if (flag_in === 'left') {
                list_num.insertBefore(add, list_num.firstElementChild);
                number.unshift(value);
            }
            count++;
        } else {
            alert('请输入不多于60个10-100之间的数字')
        }
        input.value = '';//清空输入框
    }

结果示意

1504148970(1).png

注意事项

  • var num = number.slice();不可少。
    排序时,务必复制一份number数组,不要在原数组上操作,否则会破坏原有的顺序,因为number是全局的,in和out都能用到。
  • input.value = '';而不是value=‘’。
    在in单击发生时,需要清空input框,代码中有一句var value = input.value;,清空时input.value = '';才对,不要顺手写了value=‘’。

本人前端小白一个,欢迎大家批评指正。

相关文章

  • 斌斌学院JS-task5

    任务目的 学习与实践JavaScript的基本语法、语言特性 练习使用JavaScript实现简单的排序算法 任务...

  • 斌斌学院(js笔记)

    在JavaScript中,一切都是对象。 使用深度优先遍历,element是一个DOM元素,selectors是一...

  • [原创文集]对白

    旅游学院 旅18旅服本班 金怀斌 对白 (金怀斌...

  • 斌斌学院任务一(JavaScript入门)

    JavaScript ( **JS **) 是一种轻量级解释型的,或是JIT编译型的程序设计语言,有着 函数优先 ...

  • 斌斌

    斌斌是镇上不折不扣的富二代。他爸在镇上最旺的街上买了一大块地,建了五层高的房子, 开一辆五十多万的车。在没有贷款买...

  • 斌斌

    大致21年卯时 6月炎热望江路 有条舔狗叫斌斌 斌斌……斌斌…… 我以为叫我

  • 通过实现背景模糊、文字颜色流光渐变、边框扩展等效果学习trans

    百度前端技术学院2017于2月24日开始进行,一共有6个学院可供学习,分别是小薇学院(html/css基础)、斌斌...

  • 利用border-radius属性及动画属性制作圆饼loadin

    百度前端技术学院2017于2月24日开始进行,一共有6个学院可供学习,分别是小薇学院(html/css基础)、斌斌...

  • 给斌斌

    总是叫你给我唱歌 其实是因为特别喜欢你的声音 虽然也没有经常听你的声音 但就是喜欢 不管你是音痴还是什么的都好 我...

  • 睿智斌斌

    睿斌,多么有内涵的名字,睿智斌斌。睿斌就像这个名字一样,文质彬彬,如果生活在古代,睿斌就是一个贵公子啊! 睿斌很秀...

网友评论

    本文标题:斌斌学院JS-task5

    本文链接:https://www.haomeiwen.com/subject/kdgudxtx.html