JavaScript积累——DOM操作

三个按钮的点击变色功能及对应信息框显示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    .wrap div{
        display : none;
        width: 200px;
        height: 200px;
        border: solid red 2px;
    }  
    </style>
    
</head>
<body>
	<div class="wrap">
        <button class="active">No.1</button>
        <button class="active">No.2</button>
        <button class="active">No.3</button>
        <div class="words">文本1</div>
        <div class="words">文本2</div>
        <div class="words">文本3</div>
    </div>
    
    <script>
    // 获取按钮和文字框的类数组对象
    var btn = document.getElementsByTagName('button');
    var div = document.getElementsByClassName('words');
    // 循环定义所有的按钮的“点击监听事件”
    for(var i = 0; i < btn.length; i++){
        // 通过立即执行函数来将循环的i转化为固定的值传入div[j]中,
        // 以保持按钮与信息框的对应。再利用闭包原理将监听事件保存下来
        (function (j) {
            btn[j].onclick = function (){
            // 此处的功能为,被点击的按钮底色变黄,其他按钮颜色清除
            for(var n = 0; n < btn.length; n++){
                // 1、先清除掉所有的按钮的底色
                btn[n].style.backgroundColor = '';
                div[n].style.display = 'none';
            }
            // 2、在此处添加被点击的按钮的底色
            this.style.backgroundColor = 'yellow';
            // 添加信息框的显示功能
            div[j].style.display = 'block';
            }
        }(i))
    }
    </script>

</body>
</html>

 
 

查看键盘点击事件的编号

// 查看打印出来的e中的which 即可知道,点击此按键时的事件编号
document.onkeydown = function(e){
                console.log(e);
        }

如(chrome):方向键: 左、上、右、下—— 37、38、39、40

 
 

实现键盘方向键控制div的移动

<script>
        var div = document.createElement('div'); // 创建一个document的div对象
        document.body.appendChild(div); // 向document.body中插入一个div
        div.style.width = '100px'; // 设置div的宽高
        div.style.height = '100px';
        div.style.backgroundColor = 'red'; // 设置div的填充颜色
        div.style.position = 'absolute'; // 设置div的浮动,以实现其自由移动
        div.style.left = '0'; // 设置div的初始位置
        div.style.top = '0';
        // 设置网页的键盘点击监控事件
        document.onkeydown = function(e){
            // 当4个方向的每次点击步进相同的时候,设置一个变量来统一修改
            var moveStep = 10;
            // 当点击键盘左时,方块向左移动moveStep个单位
            if(e.which == 37){
                div.style.left = parseInt(div.style.left) - moveStep + 'px';
            }else if(e.which == 38){
                div.style.top = parseInt(div.style.top) - moveStep + 'px';
            }else if(e.which == 39){
                div.style.left = parseInt(div.style.left) + moveStep +'px';
            }else if(e.which == 40){
                div.style.top = parseInt(div.style.top) + moveStep + 'px';
            }            
        }
    </script>

此处将if else if 改为switch更加方便以后添加东西

<script>
        var div = document.createElement('div'); // 创建一个document的div对象
        document.body.appendChild(div); // 向document.body中插入一个div
        div.style.width = '100px'; // 设置div的宽高
        div.style.height = '100px';
        div.style.backgroundColor = 'red'; // 设置div的填充颜色
        div.style.position = 'absolute'; // 设置div的浮动,以实现其自由移动
        div.style.left = '0'; // 设置div的初始位置
        div.style.top = '0';
        // 设置网页的键盘点击监控事件
        document.onkeydown = function(e){
            // 当4个方向的每次点击步进相同的时候,设置一个变量来统一修改
            var moveStep = 10;
            // 当点击键盘左时,方块向左移动moveStep个单位
            switch(e.which){
                case 37:
                    div.style.left = parseInt(div.style.left) - moveStep + 'px';
                    break;
                case 38:
                    div.style.top = parseInt(div.style.top) - moveStep + 'px';
                    break;
                case 39:
                    div.style.left = parseInt(div.style.left) + moveStep +'px';
                    break;
                case 40:
                    div.style.top = parseInt(div.style.top) + moveStep + 'px';
                    break;                
            }              
        }
    </script>

 
 

实现某标签内部子标签由现在顺序改变为逆序排列

<body>
    <div>
        <a>this is a
            <ul>
                <li 1=""></li>
                <li 2=""></li>
                <li 3=""></li>
                <li 4=""></li>
                <li 5=""></li>
            </ul>
        </a>
        <em>this is em</em>
        <b>this is b</b>
        <strong>this is strong</strong>
        <address>this is address</address>
    </div>

    <script>
    // 将上面的div逆序
    function tagReverse(tag) {
        var childNodes = tag.children;
        var n = tag.children.length;
        while(n){
            // 倒序选出每一个元素子节点,再将其用parentNode.appendChild()方法插入到父节点的末尾处
            tag.appendChild(childNodes[n-1])
            n -= 1;
        }
        return tag;
    }

    var div = document.getElementsByTagName('div')[0];
    var res = tagReverse(div);
    console.log(res);

    </script>
    
</body>

 
 

实现 parentNode.insertAfter(a, b),在b之后插入a

// 实现 parentNode.insertBefore(a,b) 的类似函数 .inserAfter(a,b)
    Element.prototype.inserAfter = function (a,b) {
        var beforeNode = afterNode.nextElementSibling;
        if(beforeNode == null){
            this.appendChild(a);
        }else{
            this.insertBefore(targetNode, beforeNode);
        }        
    }

 
 

实现页面自动滚动

<div style="width: 100px;
            height:100px;
            background-color: orange;
            color: #fff;
            font-size: 40px;
            font-weight: bold;
            text-align: center;
            line-height: 100px;
            position: fixed;
            bottom: 200px;
            right: 50px;
            border-radius: 50%;
            opacity: 0.5;">start</div>
<div style="width: 100px;
		    height:100px;
		    background-color: green;
		    color: #fff;
		    font-size: 40px;
		    font-weight: bold;
		    text-align: center;
		    line-height: 100px;
		    position: fixed;
		    bottom: 50px;
		    right: 50px;
		    border-radius: 50%;
		    opacity: 0.5;">stop</div>

    <!-- 自动滚动的小说阅读器 -->
    <script>
        // 开启按钮
        var start = document.getElementsByTagName('div')[0];
        // 结束按钮
        var stop = document.getElementsByTagName('div')[1];
        // 给timer一个初始值,以免一开始就点击结束时候抛出异常
        var timer = 0;
        // 加锁式的编程思维,以免多次点击开始时候 滚动速度越来越快
        var key = true;
        // 添加对“开始”按钮的点击事件
        start.onclick = function () {
            // 判断key是否为true,避免多次点击触发加速且无法停止
            if(key){
                timer = setInterval(function (){
                window.scrollBy(0, 10);// 若要修改滚动速度,可以修改此处的x,y
                },100);// 此处的100仅在第一次使用setInterval的时候有效,之后再更改是无效的,以第一次为准
                key = false;
            }
        }
        // 添加对“停止”按钮的点击事件
        stop.onclick = function(){
            clearInterval(timer);
            // 点击停止之后将锁打开,允许再次点击开始
            key = true;
        }
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值