百度前端学院学习-DAY20-21:和页面对话

百度前端学院学习-DAY20-21:和页面对话

课程概述

作业提交截止时间:09-01

第二十到第二十一天:让你和页面对话

课程目标

  • 掌握 JavaScript 事件的概念,并能写出基本的事件相关的代码
  • 掌握如何通过 JavaScript 操作 DOM 的样式

课程描述

阅读

首先学习了解 JavaScript 事件的知识

编码

<input id="name" type="text">    
<button id="submit-btn">Submit</button>

在HTML中增加上面的代码,然后通过JavaScript编写如下功能:

  • 当点击按钮 submit-btn 时,在console中输出 name 中的内容
  • 在输入过程中,如果按回车键,则同样执行上一条的需求
  • 在输入过程中,如果按 ESC 键,则把输入框中的内容清空

阅读

接下来学习如何用 JavaScript 操作 DOM 样式

编码

控制元素的显示及隐藏

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">    
    <title>IFE ECMAScript</title>
    <style>
        select {
            display: none;
        }
    </style>
</head>
<body>            
    <label>
        <input id="school" name="status" type="radio">
        School
    </label>
    <label>
        <input id="company" name="status" type="radio">
        Company
    </label>

    <select id="school-select">        
        <option>北京邮电大学</option>
        <option>黑龙江大学</option>
        <option>华中科技大学</option>
    </select>

    <select id="company-select">        
        <option>百度</option>
        <option>爱奇艺</option>        
    </select>
</body>
</html>

基于如上 HTML,实现以下功能:

  • 当用户选择了 School 的单选框时,显示 School 的下拉选项,隐藏 Company 的下拉选项
  • 当用户选择了 School 的单选框时,显示 Company 的下拉选项,隐藏 School 的下拉选项

编码

再次结合事件和样式设置,进行练习

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">    
    <title>IFE ECMAScript</title>
    <style>
        .palette {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .palette li {
            width: 40px;
            height: 40px;
            border: 1px solid #000;
            cursor: pointer;
        }
    </style>
</head>
<body>            
    <ul class="palette">
        <li style="background-color:crimson"></li>
        <li style="background-color:bisque"></li>
        <li style="background-color:blueviolet"></li>
        <li style="background-color:coral"></li>
        <li style="background-color:chartreuse"></li>
        <li style="background-color:darkolivegreen"></li>
        <li style="background-color:cyan"></li>
        <li style="background-color:#194738"></li>        
    </ul>

    <p class="color-picker"></p>

    <script>
        var list = document.querySelectorAll("li");
        for (var i = i = 0, len = list.length; i < len; i++) {
            list[i].onclick = function(e) {
                var t = e.target;
                var c = t.style.backgroundColor;
                var p = document.getElementsByClassName("color-picker")[0]
                p.innerHTML = c;
                p.style.color = c;

            }
        }
    </script>
</body>
</html>

基于如上 HTML,实现如下功能:

  • 点击某一个 Li 标签时,将 Li 的背景色显示在 P 标签内,并将 P 标签中的文字颜色设置成 Li 的背景色

阅读

继续阅读,再次理解 JavaScript 的事件机制,并了解事件代理

编码

基于上面的学习,如果你上一个练习没有用到事件代理的方式,那么请重构上一个编码练习,如果已经用到了,则进入下一个练习

阅读

在进行下一个练习之前,我们顺便学习一个新知识:定时

扫描二维码关注公众号,回复: 1731731 查看本文章

编码

<div id="fade-obj" style="width:300px;height:300px;background:#000"></div>
<button id="fade-btn">淡出</button>

针对以上 HTML,分别使用 setTimeout 和 setInterval 实现以下功能:

  • 点击按钮时,开始改变 fade-obj 的透明度,开始一个淡出(逐渐消失)动画,直到透明度为0
  • 在动画过程中,按钮的状态变为不可点击
  • 在动画结束后,按钮状态恢复,且文字变成“淡入”
  • 在 按钮显示 淡入 的状态时,点击按钮,开始一个“淡入”(逐渐出现)的动画,和上面类似按钮不可点,直到透明度完全不透明
  • 淡入动画结束后,按钮文字变为“淡出”
  • 暂时不要使用 CSS animation (以后我们再学习)

阅读

在进行今天最后一个练习时,我们来学习一个新概念:CSS Sprite

编码

学习来实现一个帧动画:

阅读

最后,可以通过阅读标准,加深理解

提交

把你今天觉得做得最好的代码放在Github后进行提交

总结

  • 中间暂停了一段时间,现在开始捡起来
  • 学习用时2天,主要学习了DOM 事件类型、事件委托
  • 刚开始觉得编码比较困难,布置从何下手

下一个任务预告

我们已经通过许多练习让你体会了 JavaScript 究竟用来干嘛,明天开始,我们将回到许多基础概念,并通过练习来巩固一些基础知识

编码练习

以下是我在学习过程中的编码:

1.随机背景颜色

    <button>Change color</button>
    <script>
        var btn = document.querySelector('button');

        function random(number) {
            return Math.floor(Math.random()*(number+1));
        }
        btn.onclick = function() {
            var rndCol = 'rgb('+random(255)+','+random(255)+','+random(255)+')';
            document.body.style.backgroundColor = rndCol;
        } 
    </script>

2.input框

  • 当点击按钮 submit-btn 时,在console中输出 name 中的内容
  • 在输入过程中,如果按回车键,则同样执行上一条的需求
  • 在输入过程中,如果按 ESC 键,则把输入框中的内容清空
<input id="name" type="text">    
    <button id="submit-btn">Submit</button>
    <script>
        var btn = document.getElementById('submit-btn');
        btn.onclick = function(){
            var inputText = document.getElementById('name').value;  
            console.log(inputText);
        }
        document.onkeydown = function getKey(){
            if(event.keyCode == 13){  
                var inputText = document.getElementById('name').value;  
                console.log(inputText); 
            }   
            if(event.keyCode == 27){
                var inputText = document.getElementById('name');
                inputText.value = "";
                inputText.focus();   
            }
        }
    </script>

3.控制元素的显示及隐藏

    <style>
        select {
            display: none;
        }
    </style>
    <label>
        <input id="school" name="status" type="radio">
        School
    </label>
    <label>
        <input id="company" name="status" type="radio">
        Company
    </label>

    <select id="school-select">        
        <option>北京邮电大学</option>
        <option>黑龙江大学</option>
        <option>华中科技大学</option>
    </select>

    <select id="company-select">        
        <option>百度</option>
        <option>爱奇艺</option>        
    </select>
    <script>
    var schoolRadio = document.querySelector('#school');
    var companyRadio = document.querySelector('#company');
    var schoolSelect = document.querySelector('#school-select');
    var companySelect = document.querySelector('#company-select');
    schoolRadio.onclick = function () {
      console.log(1);
    }
    function checkSelect(e) {
      if (e.target.checked) {
        console.log(1);
        if (e.target.id.indexOf('school') >= 0) {
          schoolSelect.style.cssText = "display:block"
          companySelect.style.cssText = 'display:hide';
        } else if (e.target.id.indexOf('company') >= 0) {
          schoolSelect.style.cssText = 'display:hide';
          companySelect.style.cssText = "display:block"
        }
      }
    }
    schoolRadio.addEventListener('click', checkSelect);
    companyRadio.addEventListener('click', checkSelect);
    // schoolSelect.style.display = 'block';
  </script>
  <!-- 当用户选择了 School 的单选框时,显示 School 的下拉选项,隐藏 Company 的下拉选项
当用户选择了 School 的单选框时,显示 Company 的下拉选项,隐藏 School 的下拉选项 -->

4.控制DIV属性

<style>
#outer{width:500px;margin:0 auto;padding:0;text-align:center;}
#div1{width:100px;height:100px;background:black;margin:10px auto;display:block;}
</style>
<script>
var changeStyle = function (elem, attr, value)
{
    elem.style[attr] = value
};
window.onload = function ()
{
    var oBtn = document.getElementsByTagName("input");
    var oDiv = document.getElementById("div1");
    var oAtt = ["width","height","background","display","display"];
    var oVal = ["200px","200px","red","none","block"];

    for (var i = 0; i < oBtn.length; i++)
    {
        oBtn[i].index = i;
        oBtn[i].onclick = function ()
        {
            this.index == oBtn.length - 1 && (oDiv.style.cssText = "");
            changeStyle(oDiv, oAtt[this.index], oVal[this.index])
        }  
    }
};
</script>
</head>
<body>
<div id="outer">
<input type="button" value="变宽" />
<input type="button" value="变高" />
<input type="button" value="变色" />
<input type="button" value="隐藏" />
<input type="button" value="重置" />
<div id="div1"></div>
</div>  

5.事件代理

  • 点击某一个 Li 标签时,将 Li 的背景色显示在 P 标签内,并将 P 标签中的文字颜色设置成 Li 的背景色
    <style>
        .palette {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .palette li {
            width: 40px;
            height: 40px;
            border: 1px solid #000;
            cursor: pointer;
        }
    </style>
</head>
<body>            
    <ul class="palette">
        <li style="background-color:crimson"></li>
        <li style="background-color:bisque"></li>
        <li style="background-color:blueviolet"></li>
        <li style="background-color:coral"></li>
        <li style="background-color:chartreuse"></li>
        <li style="background-color:darkolivegreen"></li>
        <li style="background-color:cyan"></li>
        <li style="background-color:#194738"></li>        
    </ul>

    <p class="color-picker"></p>

    <script>
        var ul = document.querySelectorAll("ul")[0];
        var p = document.querySelectorAll("p")[0];
        ul.onclick = function (e) {
            var target = e.target;
            colorPicker(target);
        };
        function colorPicker(target) {
            var bgColor = target.style.backgroundColor;
            p.innerHTML = bgColor;
            p.style.color = bgColor;
        }
    </script>
</body>

6.淡入淡出

  • 点击按钮时,开始改变 fade-obj 的透明度,开始一个淡出(逐渐消失)动画,直到透明度为0
  • 在动画过程中,按钮的状态变为不可点击
  • 在动画结束后,按钮状态恢复,且文字变成“淡入”
  • 在 按钮显示 淡入 的状态时,点击按钮,开始一个“淡入”(逐渐出现)的动画,和上面类似按钮不可点,直到透明度完全不透明
  • 淡入动画结束后,按钮文字变为“淡出”
  • 暂时不要使用 CSS animation (以后我们再学习)
    <div id="fade-obj" style="width:300px;height:300px;background:#000"></div>
    <button id="fade-btn">淡出</button>

    <script>
        var btn = document.getElementById("fade-btn");
        var fade = document.getElementById("fade-obj");
        var i = 1;

        function fadeout(){
            fade.style.opacity = i;
            i-=0.1;
            btn.disabled = true;
            if(i>0){
                setTimeout(fadeout,100);
            }else if(i<=0){
                btn.innerText = '淡入';
                btn.disabled = false;
                btn.addEventListener('click',fadein);
            }
        }

        function fadein() {
            fade.style.opacity = i;
            i+=0.1;
            btn.disabled = true;
            if(i<1){
                setTimeout(fadein,100);
            }else if(i>=1){
                btn.innerText = '淡出';
                btn.disabled = 'false';
                btn.addEventListener('click',fadeout);
            }
        }
        btn.addEventListener('click',fadeout);
    </script>

7.CSS Sprite

    <style>
        div{
            width:480px;
            height: 480px;
            background: url("erik.jpg");
        }
    </style>
</head>
<body>
    <div id="ani"></div>
<script>
    window.onload=function(){
        var ani=document.getElementById("ani");
        var Y = 480;

        function gif() {
            ani.style.backgroundPositionY = '-' + Y + 'px';
            Y>8160?Y=480:Y+=480;
        }
            setInterval(gif, 100);
        }
</script>   
</body>

猜你喜欢

转载自blog.csdn.net/weixin_39611130/article/details/80698932