C1能力认证训练题解析 _ 第四部分 _ Web进阶(2)

简介: C1能力认证训练题解析 _ 第四部分 _ Web进阶(2)

五、事件基础

事件绑定方式:


1. 方式一:行内事件属性赋值

<button onclick="alert('行内事件属性赋值')">点击按钮</button>

2. 方式二:事件属性赋值


var btn = document.querySelector('button');
btn.onclick = function() {
  alert('事件属性赋值')
}

3. 方式三:事件监听


//格式:addEventListener(type, listener, useCapture)
//type: 事件类型
//listener: 监听器(处理程序)
//useCapture: 默认为false,设置为true时,不会因冒泡触发监听器
const btn = document.querySelector('button');
btn.addEventListener('click', function() {
  alert('事件监听')
})

(1)实现点击按钮,更改按钮内容效果,请补全横线处代码。


<button class="btn">点击我</button>
<script>
document.querySelector('.btn').________ ('click', function() {
    this.innerText = '我被点击了'
})
</script>

答案:addEventListener


此处需要为按钮绑定点击事件,根据代码形式可知,此处应使用事件监听方法。


(2)实现点击按钮,更改按钮内容效果,请补全横线处代码。


<div class="box">点击这个盒子</div>
<script>
    document.querySelector('.box').________ = function() {
        this.style.backgroundColor = '#000'
        this.style.color = '#fff'
        this.innerText = '盒子黑了'
    }
</script>

答案:onclick


此处使用事件属性赋值的方式绑定点击事件。


(3)实现点击变身按钮,弹出变身台词,请补全横线处代码。


<button>变身</button>
<script>
    var btn = document.querySelector('button')
    btn.addEventListener('click', ________)
    function rider() {
        alert("胜利的法则已经确定了!")
    }
</script>

答案:rider


由题知,点击按钮需要弹出对话框,addEventListener方法第二个参数可以填写对应函数名进行监听,注意函数名后不需要括号。


(4)点击输出数字按钮,最终输出的数字是________。


<button>输出数字</button>
<script>
    var btn = document.querySelector('button')
    btn.onclick = foo2
    btn.onclick = foo1
    function foo1() {
        console.log(111)
    }
    function foo2() {
        console.log(222)
    }
</script>

答案:111


使用事件属性绑定两个事件处理程序,只会执行最后一个。


(5)代码如下,点击一次按钮,p元素中显示的数字是________。


<button >按钮</button>
<p>0</p>
<script>
  var btn = document.querySelector('button')
  var num = 0
  btn.addEventListener('click', function() {
    num++
    document.querySelector('p').innerHTML = num
  })
  btn.addEventListener('click', function() {
    num++
    document.querySelector('p').innerHTML = num
  })
</script>

答案:2


addEventListener为事件监听方法,可以调用多次事件处理程序,所以num执行了两次加法运算。


六、鼠标及键盘事件

1. 常用鼠标事件

image.png

       PS:事件处理程序中的this指代当前操作元素。


2. 常用键盘事件

image.png

3. 常用键盘属性事件

image.png

(1)实现点击按钮,弹出“已点击”提示,补全代码。

var btn = document.querySelector('button');
btn.addEventListener('________', showPublish);
function showPublish() {
  alert('已点击');
}

答案:click


addEventListener方法第一个参数为事件名称,此处应为对应的点击事件名称。


(2)点击按钮,弹框显示对应按钮中文字,补全代码。


<button>按钮1</button>
<button>按钮2</button>
<button>按钮3</button>
<script>
  var btns = document.querySelectorAll('button')
  for (var idx = 0; idx < btns.length; idx++) {
    btns[idx].addEventListener('click', function() {
      alert(________.innerHTML)
    })
  }
</script>

答案:this


横线处指的是当前节点,此处需要一个能指代当前节点的变量。


(3)鼠标移出span元素时,字体大小是________px。


<span>五谷丰登</span>
<script>
    var span = document.querySelector('span')
    span.addEventListener('mouseenter', function() {
        this.style.fontSize = '16px'
    })
    span.addEventListener('mouseleave', function() {
        this.style.fontSize = '14px'
    })
</script>

答案:14


mouseleave代表鼠标移出事件。


(4)补全代码 ,实现在文本框中输入内容时,唐僧先于白龙马输出。


<input type="text" />
<script>
  var input = document.querySelector('input')
  input.addEventListener('________', function() {
    console.log('白龙马')
  })
  input.addEventListener('keypress', function() {
    console.log('唐僧')
  })
</script>

答案:keyup


常用键盘事件执行顺序为:keydown->keypress->keyup。


(5)在input输入框中点击回车后,弹出登录成功提示,补全代码。


<input type="text">
<script>
  var input = document.querySelector('input')
  input.addEventListener('keyup', function(event) {
    if (event.key=== '________') {
      alert('登录成功')
    }
  })
</script>

答案:Enter


event.key返回按键标识符,此处应为对应的回车键标识符。


七、窗口事件

常用鼠标事件:

image.png

(1)实现窗口大小发生变化时,重置div元素高度为当前窗口高度的一半,请补全横线处代码。


<style>
    .box {
        width: 200px;
        height: 500px;
        background-color: blue;
    }
</style>
<div class="box"></div>
<script>
  window.addEventListener('________', function() {
      document.querySelector('.box').style.height = window.innerHeight/2 + 'px'
  })
</script>

答案:resize


此处需要监听窗口大小的变化,横线处应为对应的窗口大小改变事件名。


(2)实现窗口滚动时,类名为top的元素固定在顶部,请补全横线处代码。


<style>
    .box {height: 3000px;}
    .top {width: 200px;height: 200px;background-color: gray;}
</style>
<div class="box">
    <span>我是顶部</span>
    <div class="top">顶部元素</div>
</div>
<script>
  window.addEventListener('________', function() {
      document.querySelector('.top').style.position = 'fixed'
  })
</script>

答案:scroll


此处需要监听窗口滚动变化,横线处应为对应的元素滚动事件名。


(3)将h1元素中文字改为“欢迎光临”,请补全横线处代码。


<script>
  window.addEventListener('________', function() {
    document.querySelector('h1').innerText = "欢迎光临"
  })
</script>
<h1>等待中</h1>

答案:load


由于代码中的js写在了h1元素上方,所以需要等待页面加载完成才能获取到此元素,此处需使用页面加载完成时触发的事件。


(4)代码如下,最后输出的num数字是________。


<script>
  var num = 0
  function add() {
    if(document.querySelector('.box')) {
      num++
    }
    console.log(num)
  }
  add()
  window.addEventListener('load', function() {
    add()
  })
  add()
</script>
<div class="box"></div>

答案:1


add方法中,只有获取到box节点时才会对num加1;


box节点在JS代码下方,只有在load事件中的add方法才能获取到box节点,所以最终num只会执行一次相加。


八、BOM window 对象

1. window对象:

image.png

image.png


2. location 对象:

image.png

3. history 对象:

image.png

4. navigator对象:

image.png

5. screen对象:

image.png


(1)补全代码,完成点击按钮返回顶部的功能。


<style>
  .box { height: 3000px; }
  .btn { position: fixed;bottom: 50px;right: 50px; }
</style>
<div class="box"><p>我是顶部</p></div>
<button class="btn">返回顶部</button>
<script>
  var btn = document.querySelector('.btn')
  btn.addEventListener('click', function() {
    scrollTo(0,________)
  })
</script>

答案:0


返回顶部需要使用scrollTo方法,scrollTo的两个参数为窗口横坐标和纵坐标位置,此处应为顶部对应的纵坐标大小。顶部为(0,0)


(2)判断当前网页是否为http协议,如果是,则在当前页面跳转到https协议的页面,补全代码。

<script>
  if (location.________ === 'http:') {
  window.open('https://newsite.com', 'self')
  }
</script>

答案:protocol


此处需要判断网址协议,横线处应使用location对象中代表网址协议的属性。


(3)当前操作系统是否为windows,如果是windows则跳转对应下载地址,补全代码。


<button>下载VS code</button>
<script>
  if (navigator.________ === 'Win32') {
      document.querySelector('button').addEventListener('click', function() {
          location.href= 'https://code.visualstudio.com/docs/?dv=win64user'
      })
  }
</script>

答案:platform


此处需要判断当前系统类型,横线处应使用navigator中代表当前运行操作系统的属性。


(4)div元素的字体大小为________px,补全代码。


<style>
  .box {
    font-size: 16px;
  }
</style>
<div class="box">宽度比较</div>
<script>
  var box = document.querySelector('.box')
  if (screen.width < window.innerWidth) {
    box.style.fontSize = '12px'
  }
</script>

答案:16

screen.width代表屏幕宽度,window.innerWidth代表浏览器窗口宽度,浏览器宽度不可能超过屏幕宽度。


九、BOM 定时器

image.png

(1)实现页面等待2.5秒后显示对话框,请补全代码。


<script>
  setTimeout(showAlert, _____)
  function showAlert() {
    alert('你的小可爱突然出现')
  }
</script>

答案:2500


setTimeout设置的时间单位为毫秒,1秒 = 1000毫秒


(2)监听是否点击支付按钮,若点击支付则弹出支付成功提示,请补全代码。


<button>支付</button>
<script>
  var btn = document.querySelector('button')
  var flag = false
  btn.onclick = function() {
    flag = true
  }
  ________(function() {
    if (flag) {
      alert('支付成功')
    }
  }, 1000)
</script>

答案:setInterval


用户点击支付按钮的时机不确定,所以需要多次查询用户是否点击(点击后,flag为true),需要使用周期性定时器。


(3)代码如下,实现点击按钮停止定时器的功能,请补全代码。

<h1>0秒</h1>
<button>停止</button>
<script>
  var timer = setTimeout(function() {
    document.querySelector('h1').innerText = '5秒过去了'
  }, 5000);
  document.querySelector('button').addEventListener('click', function() {
    document.querySelector('h1').innerText = '提前停止'
    ________(timer)
  })
</script>

答案:clearTimeout


此处使用了setTimeout定时器,为了实现定时器的提前停止,需要使用其对应的清除定时器方法。

相关文章
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
619 3
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
存储 数据库 数据可视化
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
374 1
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
218 1
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
488 6
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
351 2
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
Python面向对象进阶:深入解析面向对象三要素——封装、继承与多态
|
Cloud Native 数据库 数据可视化
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
173 1
|
网络协议 数据格式 Python
Python进阶---HTTP协议和Web服务器
Python进阶---HTTP协议和Web服务器
200 4
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
140 0
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
【7月更文挑战第20天】模板引擎如Jinja2在Python Web开发中连接后端与前端,提高代码可读性和协作效率。Flask默认集成Jinja2,提供条件语句、循环、宏和模板继承等功能。例如,创建一个简单Flask应用,渲染&quot;Hello, World!&quot;,并展示如何使用条件语句和循环处理数据。通过宏定义重用代码,模板继承实现页面结构共享。学习模板引擎能提升开发效率和项目质量。
208 0

推荐镜像

更多
  • DNS