DOM.案例

密码可视

一点击小眼睛,就能看到输入的内容,再点小眼睛,又变成密码框,这个类型操作的是input的属性

<head>

</head>
<body>
	<input type="password" id="password">
	<button id="eyebtn">eye</button>
	<script>
		var passInput=document.getElementById("password")
		var eyeBtn=document.querySelector("#eyebtn")
		
		eyebtn.onclick=function(){
			console.log(passInput.type)

			if(passInput.type==="password"){
				password.type="text"
			}else{
				passInput.type="password"
			}
		}
	</script>
</body>

购物车全选

点击全选后,下面的列表全部选上;当下面的列表一个一个全部选上后,全选按钮自动亮

<head>

</head>
<body>
	<input type="checkbox" id="all">全选/全部选
	<hr>
	<ul class="shop">
		<li>
			<input type="checkbox">商品1
		</li>
		<li>
			<input type="checkbox">商品2
		</li>
		<li>
			<input type="checkbox">商品3
		</li>
		<li>
			<input type="checkbox">商品4
		</li>
	</ul>
	<script>
		var oAll=document.querySelector('#all')
		var oitems=document.querySelectorAll(".shop input")
		oAll.onclick=function(){
			for(var i=0;i<oitems.length;i++){
				oitems[i]checked=oAll.checked
			}
		}//点击全选
		
		for(var i=0;i<oitems.length;i++){
			oitems[i].onclick=handler
		}

		function handler(){
			var count=0
			/*每次点完后count赋值0,然后再进行
			for循环判断每一项 如果checked 就
			count++*/
			
			for(var i=0;i<oitems.length;i++){
				if(oitems[i],checked) count++
			}
			if(count===oitems.length){
				oAll.checked=true
			}else{
				oAll.checked=false
			}
		}//选完所有商品后,全选按钮自动选上
	</script>
</body>

页面渲染

<head>
	<style>
		*{
			margin:0;
			padding:0;
		}
		ul{
			list-style:none;
		}
		li{
			overflow:hidden;
		}
		li img{
			float:left;
			width:100px;
		}
	</style>
</head>
<body>
	<ul>
		<li>
			<img src="./一张图片">
			<h3>神奇动物:邓布利多之谜</h3>
			<p>观众评分 7.8</p>
		</li>
	</ul>

	<script>
		var filmList/*可以是后端数据*/={
			{
				url:"",
				title:"",
				grade:
			},
			{
				url:"",
				title:"",
				grade:
			},
			{
				url:"",
				title:"",
				grade:
			}
		}//现在要把这些数据做成li,查到上面的ul中
		
		var filmItems=filmList.map(function(item){
			return `<li>
			<img src="&{item.url}" alt="">
			<h3>&{item.title}</h3>
			<p>观众评分 &{item.grade}<>
			/*用&+{}的话,就表示里面的内容可以当场js
			代码执行,可以放变量*/
		</li>`
			})//   `   `  是换行字符串

		console.log(filmItems.join(""))

		var oul = document.querySelector("ul")

		oul.innerHTML = fileItem.join("")
	</script>
</body>

简易选项卡

<head>
	<style>
	*{
		margin:10;
		passing:0;
	}
		ul{
			display:file;
			Lisy-style:none;
		}
		li {
			height:50px;
			Line-height:50px;
			text-aligh:center;
			flex:1;
		}
		.active{
			color:red;
			boder-buttom:100px 1px splid red;
		]
	</style>
</head>


<body>
	<ul>
		<li class="active id=""item1">正在热映</li>
		<li id="item2">即将上映</li>
	</ul>

	<script>
		item1.onclick = function(){
			item1.classList.add("active")
			item2.classList.remove("active")
		}//点击item1,增加1的active,删掉2的active

		item2.onclick = function(){
			item1.classList.remove("active")
			item2.classList.add("active")
		}//点击item2.增加2的active。删掉2的active
	</script>
</body>

选项卡(further)

<head>
    <style>
        *{
            margin:0;
            padding:0;
        }
        ul{
            list-style:none;
        }
        .Header{
            display:flex;
            width:500px;
        }
        .Header li{
            flex:1;
            height:50px;
            line-height:50px;
            text-align:center;
            bottom:1px solid black;
        }
        .Box{
            position: relative;
        }
        .Box li{
            position: absolute;
            left: 0;
            height: 0;
            width:500px;
            height:200px;
            background-color:yellow;
            display: none;
        }

        .Header .active{
            background-color: cornflowerblue;
        }
        .Box .active{
            display: block;
        }
    </style>
</head>
<body>
    <ul class="Header">
        <li class="active">英雄联盟</li>
        <li>DOTA</li>
        <li>风暴英雄</li>
        <li>300英雄</li>
    </ul>
    <ul class="Box">
        <li class="active">英雄联盟(League of Legends)是由美国Riot Games开发,腾讯游戏运营的全新英雄对战网游。. 英雄联盟的主创团队由各著名游戏公司的核心美术、策划、程序人员组成,他们打造了游戏中风格特色各异的英雄,加入更加丰富的物品合成系统、地图玩法、天梯匹配机制,以及独创的"召唤师"技能、符文、天赋组合,让玩家感受不一样的英雄对战网游。. 在游戏中,玩家将扮演一位召唤者,并选择你所信任的联盟国进入这个游戏的正义领域,为了控制瓦罗然的权利而奋战。. 在这个联盟中只有一条规则:胜者就是一切!</li>
        <li>《DotA》(Defense of the Ancients),可以译作守护古树、守护遗迹、远古遗迹守卫, 是由暴雪公司出品即时战略游戏《魔兽争霸3》的一款多人即时对战、自定义地图,可支持10个人同时连线游戏,是暴雪公司官方认可的魔兽争霸的RPG地图。</li>
        <li>《风暴英雄》是一款团战游戏,其中包括了玩家耳熟能详的暴雪系列游戏英雄。 你可以个性化定制来自不同暴雪游戏时空的英雄,来找到适合自己游戏风格的英雄。 和好友一起组队进行一场快节奏的混战,不同的战场会带来不同的战术和游戏方法。 </li>
        <li>《300英雄》是由上海跳跃网络科技有限公司自主研发和运营的一款类DOTA网游。游戏以7v7组队对抗玩法为主,提供永恒战场和永恒竞技场两种经典模式任由玩家选择,并加入勇者斗恶龙、克隆战争等多种休闲娱乐玩法,主要特点是竞技感强、节奏快、对抗激烈。 </li>
    </ul>

    <script>
            var HeaderItems = document.querySelectorAll(".Header li")
            var BoxItems = document.querySelectorAll(".Box li")

            for(var i=0; i<HeaderItems.length;i++){
                HeaderItems[i].dataset.index = i
                HeaderItems[i].onclick = handler
            }

            function handler(){
                var index = this.dataset.index
                for(var m=0;m<HeaderItems.length;m++){
                    HeaderItems[m].classList.remove("active")
                    BoxItems[m].classList.remove("active")
                }
                HeaderItems[index].classList.add("active")
                BoxItems[index].classList.add("active")
            }
    </script>
</body>

动态删除

创建一个按钮,可以删除当前页面的数据

<head>

</head>

<body>
	<ul id="list">

	<ul>
	
	<script>
		var arr =["111","222","333"]

			//首先要进行一个循环
		for(var i=0;i<arr.length;i++){
			var oli = document.createElement("li")//创建oli为li
			oli.innerHTML = arr[i]//再使innerHTML的值为arr的i
			
			var obutton = document.createElement("button")//创建一个button(按钮)节点
			obutton.innerHTML ="delete"//在按钮里面放上内容
			obutton.onclick=handler//创建完按钮后就给它绑上onclick这个属性
			oli.appendChild(obutton)//把创建的按钮放到oli中
			list.appendChild(oli)//再把刚创建好的oli插入到list中
			/*以上的代码相当于:for循环遍历n次,创建
			了n个,每次创建li的时候,设置完里面的内
			容,都把一个按钮再加到li里面,最后再把
			list里面追加一个li*/
		}
		
		function handler(){
			this.parentNode.remove()//this就是按钮本身,然后找到它的父节点
		}//此函数,每个按钮点完一次都会执行一遍
		//想要实现点哪个删哪个,就需要知道点的是第几个按钮,可以用this
	</script>
</body>

懒加载

划到页面底部后,才给加载下一页的数据
如何让他知道划到了页面底部:会用到获取元素尺寸,获取元素偏移量,获取可视窗口尺寸

<head>
	<style>
		*{
			margin:0;
			padding:0;
		}
		html,body{
			height:100%;
		}
		ul li{
			overfloat:hidden;
			height:150px;
		}
		ul li img{
			float:left;
			width:80px;
		}


	</style>
</head>
<body>
	<h1>标题</h1>
	<ul id="list">
		<li>
			<img src="">
			<h3>哆啦A梦:大雄的宇宙小战争2021</h3>
		</li>
	

	</ul>
	<script>
		var arrl=[{
				name:"哆啦A梦:大雄的宇宙小战争2021"url:""
			}{
				name:"坏蛋联盟"url:""
			}{
				name:"暗恋·橘生淮南"url:""
			}{
				name:"海底小纵队"url:""
			}{
				name:"我要我们在一起"url:""
			}] 


			var arr2=[{
				name:"哆啦A梦:大雄的宇宙小战争2021"url:""
			}{
				name:"坏蛋联盟"url:""
			}{
				name:"暗恋·橘生淮南"url:""
			}{
				name:"海底小纵队"url:""
			}{
				name:"我要我们在一起"url:""
			}] //现在这个列表是写死的


		//写动态的
			renderHTMl(arrl)//arrl为后端传过来数据,写那个调用哪个
			
			function renderHTML(arr//接受形参){
				/*list.innerHTML += arr.map(functtion(item){
					retrun `<li>
							
						</li>`
				}).join("")*/

				for(var i=0;i<arr.length;i++){
					var oli = document.creatElement("li")
					oli,innerHTML = `<img src="${arr[i].url}" alt="">
					<h3>${arr[i].name}</h3>`

					list.appendchild(oli)
				}
			}

			//用监听
			isLoading = false/*如果下面的if用的是“快到底了”的话,就加这一句,防止快到底的时候继续往下滑,一直触发*/
			window.onscroll = function(){
				//console.log("1111")
				var listHeight = list.offsetHeight
				var listTop = list.offsetTop

				//console.log(listHeight+listTop)

				var scrollTop = document.documentElement.scrollTop || document.body.scrollTop
				var windowHeight = document.documentElement.clientHeight
				
				//console.log(Math.round(windowHeight+scrollTop))
				//判断
				if(Math.round(windowHeight+scrollTop)===(listHeight+listTop)){
					console.log("到底了")//前面和后面相等的时候显示一句话“到底了”
				}
				/*if((listHeight+listTop)-Math.round(windowHeight+scrollTop)<100){
					console.log("快到底了")//整个页面减去逐渐变大的滑动的页面小于100时,显示‘快到底了’”
					isLoading = true
				}*/
			}

			//渲染下一页数据
			renderHTML(arr2)

			isLoading = false
	</script>


</body>

  • 17
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值