【JavaScript】JS基础、元素属性、定时器函数、事件监听

JS基础

<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style></style>
</head>
<body>
<script>let age=18;let letters=['a','b','c'];const G=17;// 输入let name=prompt("请输入你的姓名");// +作为正号解析可以将字符串转换为数字型let num1=+prompt("输入一个数字");// 输出方式1 弹窗警告alert('warning输出');
// 输出方式2,视口显示
document.write(`我叫${name}`);// 输出方式3,控制台打印// typeof可以返回被检测数据类型console.log(typeof age);//number// praseInt() 返回值为int对象console.log(parseInt('12.56px'));//12console.log(parseFloat('asd12.56px'));//NaNconsole.log(Number('123'));//123// =:赋值;==值只要相等就返回true;===值和数据类型都要相等// 短路:&&,||
document.write(1==='2');//falseswitch(num1){case 1:  console.log(1) breakcase 2: console.log(2)  breakdefault: console.log(3) function sum(x,y){document.write(x*y);}// 匿名函数1let anonymous1=function(x,y){document.write(1*2);}// 匿名函数2var ano1=(function(x,y){return x+y})(2,3)// 匿名函数3var ano2=(function(x,y){return x*y}(3,4))document.write(ano1+ano2);//17
//匿名函数4
!(function(){})()
//匿名函数5
+(function(){})()
//匿名函数6
~(function(){})()let person={name:"jack",age:18,thing:function(){document.write('hi')}}//等同  document.write(person.name)document.write(person['name']);person.thing;//遍历对象for(let k in person){console.log(k);//属性名console.log(person[k]);//属性值}
}
// 生成N-M的随机数,Math.floor向下取整
let rand=Math.floor(Math.random()*(M-N+1))+N;//返回N-M的随机数
</script></body>
</html>

WEB APIs

1.定义

APIs:用JS操作浏览器

APIs分类:

1 DOM(文档对象模型):操作网页内容,开发特效与交互

2 BOM(浏览器对象模型)

DOM树:标签树

DOM对象:JS对象,比如document(网页所有内容都在document里面)

2 操作元素属性

2.1操作元素样式属性

2.1.1 style

生成的是行内样式表,权重比较高

// 通过style属性操作css
b[1].style.color='red';

2.1.2 获取DOM元素

querySelector与querySelectorAll

<body><ul><li>li1</li><li>li2</li></ul><div id="clas">id为clas的div1</div><div id="clas">id为clas的div2</div>
<script>
//   querySelector用于查询页面中第一个符合规则的元素
// console.dir()可以显示一个对象所有的属性和方法
const a=document.querySelector('ul li:first-child');
console.log(a);
// 返回所有匹配的元素
const b=document.querySelectorAll('#clas');
for(let i=0;i<b.length;i++)
{console.log(b[i]);//打印每一个类名为clas的对象
}
</script>
</body>

console:

2.1.3 innerHTML

<body><div id="iddiv"><span>内容1</span><span>内容2</span></div><!-- <div id="clas">id为clas的div1</div>,加这一行会覆盖12345 --><div id="clas"></div>
<script type="text/javascript">// innerHTML能识别文本,解析标签 innerTEXT只识别文本
clas.innerHTML="12345";
// 清空指定元素
iddiv.innerHTML="";
</script>
</body>

 2.1.4 className与classList

1 className
  <style>.clas{width: 200px;height: 200px;background-color: aquamarine;}.box{width: 300px;height: 300px;background-color: red;}</style>
</head>
<body><div id="clas"></div>
<script>// 获取元素
const a=document.querySelector('div');
// className会覆盖之前的类名
a.className="box";
</script>
</body>

2 classList
 .clas1{width: 200px;height: 200px;background-color: rgb(88, 12, 252);}.box1{width: 300px;height: 300px;background-color: red;}</style>
</head>
<body><div class="clas1"></div>
<script>
const b=document.querySelector('.clas1');
// 追加类,类名不加点
b.classList.add('box1');
b.classList.remove('box1');
// 切换类,有就删除,没有就加上
b.classList.toggle('box1');
</script>
</body>

 2.1.5 轮播图

基于APIs-day1-87-随机轮播图案例-下_哔哩哔哩_bilibili 视频 与资源:

   const random=parseInt(Math.random()*sliderData.length);const img=document.querySelector('.slider-wrapper img');// sliderData[random]表示数组里面的对象img.src=sliderData[random].url;// 把p里面内容更换const p=document.querySelector('.slider-footer p');p.innerHTML=sliderData[random].title;// 修改背景色const co=document.querySelector('.slider-footer');co.style.backgroundColor=sliderData[random].color;// 小原点// random取值0-7,小圆点1-8,${}用于模板文字,作用:实现字符串拼接const li=document.querySelector(`.slider-indicator li:nth-child(${random+1})`)console.log(li)li.classList.add('active')

2.2 操作表单元素属性

<body><input type="text" value="电脑"><!-- checked默认勾选 --><input type="checkbox" ><!-- disabled禁用 --><button>提交</button>
<script>
const textv=document.querySelector('input');
console.log(textv.value);//电脑
console.log(textv.innerHTML);//获取不到值
textv.type='password';
const check=document.querySelector('input');
console.log(check.checked);//false
check.checked='true'//可以但不推荐,有隐式转换
const but=document.querySelector('button');
console.log(but.disabled);//默认false
</script>
</body>

2.3 自定义属性

<body>
//自定义标签一律以data-开头<div data-id="1">1</div><div data-id="2">2</div>
<script>// querySelector默认获取匹配的第一个元素
const d=document.querySelector('div');
// dataset是集合
console.log(d.dataset.id);//1
</script>
</body>

3 定时器函数-间歇函数

例子:网页中的倒计时

3.1 setInterval

<body><div data-id="1">1</div><div data-id="2">2</div>
<script>
//setInterval(函数,间隔时间);
let set1=setInterval(function(){console.log('1s');
},1000)//1000ms=1s
// 定时器返回的一个id数字
console.log(set1);//1
function func(){console.log('2s');
}
// setInterval函数找得到func然后自动去调用
let set2=setInterval(func,2000);
console.log(set2);//2
// 关闭定时器
clearInterval(set2);
// 重新赋值
set2=setInterval(func,2000);
</script>
</body>

3.2 阅读协议案例

    <script>// 1.获取元素const btn=document.querySelector('.btn');// 单标签获取值用value,双标签获取值用innerHTMLconsole.log(btn.innerHTML);// 倒计时let i=60;// 开启定时器let n=setInterval(function(){i--btn.innerHTML=`我已经阅读用户协议(${i})`if(i === 0){clearInterval(n)// 开按钮btn.disabled=falsebtn.innerHTML="同意"}},1000) </script>

 3.3 轮播图定时器版

APIs-day1-92-综合案例-轮播图定时版_哔哩哔哩_bilibili

 // 1.获取元素const img=document.querySelector('.slider-wrapper img');const p=document.querySelector('.slider-footer p');let i=0//信号量// 2.开启定时器setInterval(function(){i++if(i>=sliderData.length){i=0}img.src=sliderData[i].urlp.innerHTML=sliderData[i].titledocument.querySelector('.slider-indicator .active').classList.remove('active')document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')},1000)

4 事件监听

4.1 addEventListener 

让程序检测是否有事件发生,如果有事件发生,马上调用函数做出响应。比如点击播放轮播图

<body><button>提交</button><div class="box1"></div>
<script>
const btn=document.querySelector('button')
btn.addEventListener('click',function(){alert('点击了')
})
const div1=document.querySelector('.box1')
div1.addEventListener('click',function(){// 让其消失div1.style.display='none'
})
</script>
</body>

4.2 随机点名案例

APIs-day2-94-随机点名案例_哔哩哔哩_bilibili

 <script>// 数据数组const arr = ['马超', '黄忠', '赵云', '关羽', '张飞']// 定时器全局变量let timeId=0 // 随机数要全局变量let random=0// 开始按钮const qs=document.querySelector('.qs')const start=document.querySelector('.start')start.addEventListener('click',function(){timeId=setInterval(function(){// 在函数里面可以是const random,因为函数执行完回收机制将random回收random=parseInt(Math.random()*arr.length)qs.innerHTML=arr[random]},1000)})if(arr.length==1)
{start.disabled=end.disabled=true
}const end=document.querySelector('.end')end.addEventListener('click',function(){clearInterval(timeId)// 结束了,删除当前抽取的那个数组元素arr.slice(random,1)})</script>

4.3 轮播图完整版

​​​​​​APIs-day2-96-轮播图完整版-上集_哔哩哔哩_bilibili

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>轮播图点击切换</title><style>* {box-sizing: border-box;}.slider {width: 560px;height: 400px;overflow: hidden;}.slider-wrapper {width: 100%;height: 320px;}.slider-wrapper img {width: 100%;height: 100%;display: block;}.slider-footer {height: 80px;background-color: rgb(100, 67, 68);padding: 12px 12px 0 12px;position: relative;}.slider-footer .toggle {position: absolute;right: 0;top: 12px;display: flex;}.slider-footer .toggle button {margin-right: 12px;width: 28px;height: 28px;appearance: none;border: none;background: rgba(255, 255, 255, 0.1);color: #fff;border-radius: 4px;cursor: pointer;}.slider-footer .toggle button:hover {background: rgba(255, 255, 255, 0.2);}.slider-footer p {margin: 0;color: #fff;font-size: 18px;margin-bottom: 10px;}.slider-indicator {margin: 0;padding: 0;list-style: none;display: flex;align-items: center;}.slider-indicator li {width: 8px;height: 8px;margin: 4px;border-radius: 50%;background: #fff;opacity: 0.4;cursor: pointer;}.slider-indicator li.active {width: 12px;height: 12px;opacity: 1;}</style>
</head><body><div class="slider"><div class="slider-wrapper"><img src="./image/slider01.jpg" alt="" /></div><div class="slider-footer"><p>对人类来说会不会太超前了?</p><ul class="slider-indicator"><li class="active"></li><li></li><li></li><li></li><li></li><li></li><li></li><li></li></ul><div class="toggle"><button class="prev">&lt;</button><button class="next">&gt;</button></div></div></div><script>// 1. 初始数据const data = [{ url: './image/slider01.jpg', title: '对人类来说会不会太超前了?', color: 'rgb(100, 67, 68)' },{ url: './image/slider02.jpg', title: '开启剑与雪的黑暗传说!', color: 'rgb(43, 35, 26)' },{ url: './image/slider03.jpg', title: '真正的jo厨出现了!', color: 'rgb(36, 31, 33)' },{ url: './image/slider04.jpg', title: '李玉刚:让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },{ url: './image/slider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },{ url: './image/slider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },{ url: './image/slider07.jpg', title: '一站式解决你的电脑配置问题!!!', color: 'rgb(53, 29, 25)' },{ url: './image/slider08.jpg', title: '谁不想和小猫咪贴贴呢!', color: 'rgb(99, 72, 114)' },]//  自动播放//  左侧按钮//  鼠标经过//  鼠标离开//  1.右侧按钮let img=document.querySelector('.slider-wrapper img')let next=document.querySelector('.toggle .next')let p=document.querySelector('.slider-footer p')let foot=document.querySelector('.slider-footer')let i=0next.addEventListener('click',function(){i++i=i>data.length?0:icommon()})// 左侧按钮let prev=document.querySelector('.toggle .prev')prev.addEventListener('click',function(){i--i=i<0?data.length-1:icommon()})
function common(){img.src=data[i].urlp.innerHTML=data[i].titlefoot.style.backgroundColor = data[i].color// 更换小原点document.querySelector('.slider-indicator .active').classList.remove('active')document.querySelector(`.slider-indicator li:nth-child(${i+1})`).classList.add('active')
}
// 自动播放
let timeId=setInterval(function() {// 利用js自动调用点击事件,click要加()next.click()
}, 1000);
// 鼠标经过大盒子,停止计时器
const slider=document.querySelector('.slider')
slider.addEventListener('mouseenter',function(){clearInterval(timeId)
})
// 鼠标离开大盒子,开启计时器
slider.addEventListener('mouseleave',function(){// 预防bugclearInterval(timeId)timeId=setInterval(function() {// 利用js自动调用点击事件,click要加()next.click()
}, 1000);
})</script>
</body></html>

 效果:

4.4 焦点事件

<script>const inp=document.querySelector('[type=search]')const ul=document.querySelector('.result-list')// 获取焦点inp.addEventListener('focus',function(){// block有显示的意思ul.style.display="block"inp.classList.add('search')})// 失去焦点inp.addEventListener('blur',function(){ul.style.display="none"})</script>

4.5 键盘事件

  <script>// 文本域获得焦点,total显示const tx=document.querySelector('#tx');const to=document.querySelector('.total')to.style.opacity=1// 检测用户输入,而2不是焦点tx.addEventListener('input',function(){to.innerHTML=`${tx.value.length}/200字`})// 文本域失去焦点,total隐藏tx.addEventListener('blur',function(){to.style.opacity=0})</script>

4.6 事件对象

4.6.1事件对象

事件监听绑定的函数第一个参数就是事件对象

一般命名为event,e,ev

<body><input><script>
// clientX:当鼠标事件发生时,鼠标相对于视口x轴的位置;
// clientY:当鼠标事件发生时,鼠标相对于视口y轴的位置;
// offsetX:当鼠标事件发生时,鼠标相对于当前DOM元素x轴的位置
// offsetY:当鼠标事件发生时,鼠标相对于事件源y轴的位置const iut=document.querySelector('input')iut.addEventListener('keyup',function(e){console.log(e.key==='Enter')console.log(e.clientX);})</script>
</body>

4.6.2回车发布评论案例

  <script>// 文本域获得焦点,total显示const tx=document.querySelector('#tx')const to=document.querySelector('.total')const it=document.querySelector('.item')const te=document.querySelector('.text')to.style.opacity=1// 检测用户输入,而2不是焦点tx.addEventListener('input',function(){to.innerHTML=`${tx.value.length}/200字`})// 文本域失去焦点,total隐藏tx.addEventListener('blur',function(){to.style.opacity=0})tx.addEventListener('keyup',function(e){if(e.key === 'Enter'){//消除两侧空格,不消除中间空格// 或写为if(tx.value.trim())if(tx.value.trim()!==''){it.style.display='block';te.innerHTML=tx.value}// 按下回车,清空文本域tx.value=''to.innerHTML='0/200字'}})</script>
</body>

4.7 环境对象

  // 每个函数里面都有this 环境对象,普通函数this对象指向window// 谁调用,this就是谁
function func(){}
// 相当于func()
window.func()
// tx调用this,this指向tx
// tx.addEventListener('blur',function(){
//       console.log(this);
//     }) 
// func作为参数传递给另一个函数,func就是回调函数
setInterval(func,100)

4.8 Tab栏切换

<script>// 返回的是a元素的数组const as=document.querySelectorAll('.tab-nav a')for(let i=0;i<as.length;i++){// 鼠标经过事件as[i].addEventListener('mouseenter',function(){document.querySelector('.tab-nav .active').classList.remove('active')// this指的是当前的athis.classList.add('active')// 下面五个大盒子document.querySelector('.tab-content .active').classList.remove('active')document.querySelector(`.tab-content .item:nth-child(${i+1})`).classList.add('active')})}
</script>

4.9 全选文本框案例

  <script>
const checkAll=document.querySelector('#checkAll')
const cks=document.querySelectorAll('.ck')
checkAll.addEventListener('click',function(){for(let i=0;i<cks.length;i++)
{cks[i].checked=checkAll.checked
}
})
// 小复选框控制大复选框
// 给所有小复选框添加点击事件
for(let i=0;i<cks.length;i++){cks[i].addEventListener('click',function(){checkAll.checked=document.querySelectorAll('.ck:checked').length===cks.length})
}</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/535478.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上位机图像处理和嵌入式模块部署(qmacvisual串口输出结果)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了图像的输入、算法的添加&#xff0c;一切看上去都没有问题。但是这中间缺少了一个重要的环节&#xff0c;那就是结果的输出。如果我…

[Java、Android面试]_02_HashMap的原理

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料&#xff0c;感兴趣的朋友可收藏关注。由于时间有限&#xff0c;只能每天整理一点&#xff0c;分享一点儿&#xff01; 现分享如下&#xf…

代码随想录算法训练营第25天|216.组和总和三、17.电话号码的字母组合

目录 一、力扣216.组合总和三1.1 题目1.2 思路1.3 代码 二、力扣17.电话号码的字母组合2.1 题目2.2 思路2.3 代码 一、力扣216.组合总和三 1.1 题目 1.2 思路 自己的想法&#xff1a;和总和问题思路类似&#xff0c;回溯法。 &#xff08;1&#xff09;k个数的组合&#xff0…

【C语言】三种方式实现字符串(char*)/字符数组(char[ ])输入输出

前言 做题时经常需要用到字符串&#xff0c;写篇笔记加强记忆&#xff0c;本文用 4个例子实现字符串的输入输出操作。 scanf(); 从键盘输入数据时&#xff0c;遇到 “空格”、“回车” 都会终止。若要接受空格&#xff0c;使用 gets(); 代替 scanf(); 多个 scanf(); 同时出现…

yum安装mysql、数据库tab自动补全,快来浅了解下 ?

centos7上面没有mysql&#xff0c;它的数据库名字叫做mariadb [rootlocalhost ~]#yum install mariadb-server -y [rootlocalhost ~]#systemctl start mariadb.service [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#ss -na…

(自用笔记)每天一点vue3—— echarts横坐标刻度标签显示不完全的问题

我是想做一个vue3echarts的账单数据展示项目&#xff0c;因为有vue2的基础&#xff0c;打算直接在这个项目上熟悉掌握vue3的新特性。这系列笔记就按照遇见问题解决问题的思路更新&#xff0c;不按照官方快速上手的章节&#xff0c;特此说明。 echarts 上次遗留一个横坐标刻度标…

CSS学习2

自己在工作中总是有一些自动化开发的需求&#xff0c;总是以为自己是有前端基础的&#xff0c;但是一写页面&#xff0c;布局都布不好&#xff0c;真是搞笑&#xff0c;说起来还是基本功不扎实啊&#xff0c;这里在重新复习一下&#xff0c;然后记录一下文档。后边在写两个综合…

判断出栈顺序是否合法

给你一个入栈顺序&#xff0c;判断出栈顺序是否合法 入栈的顺序&#xff08;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff09;出栈&#xff08;4&#xff0c;5&#xff0c;3&#xff0c;2&#xff0c;1&#xff09;是合法序列 入栈的顺序&#xff08;1&…

给你的 SpringBoot 工程部署的 jar 包瘦瘦身吧!

一、背景 SpringBoot 为我们快速开发提供了很好的架子&#xff0c;使得我们只需要少量配置就能开始我们的开发工作&#xff0c;但是当我们需要打包上传部署时&#xff0c;却是很神伤的一个问题&#xff0c;因为打出来的 Jar 包少则十几兆&#xff0c;多则一百来兆&#xff0c;…

缓存的使用

文章目录 1.为什么要有缓存&#xff1f;2.缓存使用场景3.缓存分类4.缓存使用模式5.淘汰策略6.缓存的崩溃与修复7.缓存最佳实践参考文献 1.为什么要有缓存&#xff1f; 数据访问具有局部性&#xff0c;符合二八定律&#xff1a;80% 的数据访问集中在 20% 的数据上&#xff0c;这…

自主通用多物理场仿真PaaS平台伏图(Simdroid)及伏图电子散热模块上架华为云商店

随着云计算、大数据等前沿技术的蓬勃发展&#xff0c;国内制造业正面临智能制造转型升级的机遇与挑战。工业软件是制造业研发创新不可或缺的核心工具&#xff0c;《“十四五”智能制造发展规划》中明确了工业软件对于智能制造的核心支撑作用&#xff0c;着重提出加强关键核心技…

机器视觉检测设备的组成要素

机器视觉检测设备是一种先进的自动化检测技术工具&#xff0c;它利用光学、图像处理和计算机硬件及软件技术模拟并扩展人类的视觉功能&#xff0c;以实现对产品或目标物体进行自动化的尺寸测量、缺陷检测、表面质量评估、颜色识别、形状匹配以及位置判断等功能。这种设备通常包…