1. 新浪tab栏
<style>* {margin: 0;padding: 0;}li {list-style-type: none;}.tab {width: 978px;margin: 100px auto;}.tab_list {height: 39px;border: 1px solid #ccc;background-color: #f1f1f1;border-bottom: 3px solid #c81623;vertical-align: bottom;}.tab_list li {float: left;height: 39px;line-height: 39px;padding: 0 20px;text-align: center;cursor: pointer;}.tab_list .current {background-color: #c81623;color: #fff;}.item_info {padding: 20px 0 0 20px;}.item {display: none;}</style></head><body><div class="tab"><div class="tab_list"><ul><li class="current">商品介绍</li><li>规格与包装</li><li>售后保障</li><li>商品评价(50000)</li><li>手机社区</li></ul></div><div class="tab_con"><div class="item" style="display: block;">商品介绍模块内容</div><div class="item">规格与包装模块内容</div><div class="item">售后保障模块内容</div><div class="item">商品评价(50000)模块内容</div><div class="item">手机社区模块内容</div></div></div><script>//获取元素var lis = document.querySelector('.tab_list').querySelectorAll('li')var items = document.getElementsByClassName('item');console.log(lis,items);//给每个li添加新属性和事件for (let i = 0; i < lis.length; i++) {lis[i].index=i; //这个用来给添加的新属性赋值lis[i].onclick=function(){//循环清空所有标签样式for (let i = 0; i < lis.length; i++) {lis[i].className='';// 所有div盒子隐藏items[i].style.display='none'}//设置点击时的标签样式lis[i].className='current'//将对应的div标签显示出来var index=this.index;items[index].style.display='block'}}// // 获取元素// var tab_list = document.querySelector('.tab_list');// var lis = tab_list.querySelectorAll('li');// var items = document.querySelectorAll('.item');// // for循环绑定点击事件// for (var i = 0; i < lis.length; i++) {// // 开始给5个小li 设置索引号// lis[i].setAttribute('index', i);// lis[i].onclick = function() {// // 1. 上的模块选项卡,点击某一个,当前这一个底色会是红色,其余不变(排他思想) 修改类名的方式// // 干掉所有人 其余的li清除 class 这个类// for (var i = 0; i < lis.length; i++) {// lis[i].className = '';// }// // 留下我自己// this.className = 'current';// // 2. 下面的显示内容模块// var index = this.getAttribute('index');// console.log(index);// // 干掉所有人 让其余的item 这些div 隐藏// for (var i = 0; i < items.length; i++) {// items[i].style.display = 'none';// }// // 留下我自己 让对应的item 显示出来// items[index].style.display = 'block';// }// }</script>
2. 表格隔行变色
<style>table {width: 800px;margin: 100px auto;text-align: center;border-collapse: collapse;font-size: 14px;}thead tr {height: 30px;background-color: skyblue;}tbody tr {height: 30px;}tbody td {border-bottom: 1px solid #d7d7d7;font-size: 12px;color: blue;}.bg {background-color: rgb(78, 227, 247);}</style></head><body><table><thead><tr><th>代码</th><th>名称</th><th>最新公布净值</th><th>累计净值</th><th>前单位净值</th><th>净值增长率</th></tr></thead><tbody><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr><tr><td>003526</td><td>农银金穗3个月定期开放债券</td><td>1.075</td><td>1.079</td><td>1.074</td><td>+0.047%</td></tr></tbody></table><script>let trs = document.querySelector('tbody').querySelectorAll('tr')for (let i = 0; i < trs.length; i++) {trs[i].onmouseover = function(){for (let i = 0; i < trs.length; i++) {trs[i].className=""}trs[i].className = 'bg'}trs[i].onmouseout = function(){trs[i].className=''}}</script>
3. 多选框全选
<style>table{position: absolute;right: 0;left: 0;top: 0;bottom: 0;width: 300px;height: 100px;margin: auto;text-align: center;line-height: 25px;border: 1px solid #ccc;border-collapse:collapse}tr{background-color: #ebdddd;}td{font-family: 幼圆;}tr th{background-color: rgb(228, 129, 122);color: #fff;font-weight: normal;}input{background-color: transparent;}.color{background-color: rgb(206, 168, 173);}</style></head><body><div class="warp"><table border="1px" cellspacing=0><thead><tr><th><input type="checkbox" id="all-In"></th><th>全部目标</th><th>悬赏</th></tr></thead><tbody id="JPSS"><tr><td><input type="checkbox"></td><td>熊本君</td><td>5000$</td></tr><tr><td><input type="checkbox"></td><td>巴桑</td><td>3000¥</td></tr><tr><td><input type="checkbox"></td><td>kevin桑</td><td>300$</td></tr><tr><td><input type="checkbox"></td><td>江本一郎</td><td>600¥</td></tr></tbody></table></div><script>var all = document.querySelector('#all-In');var jPs = document.getElementById('JPSS').getElementsByTagName('input');var trs = document.querySelector('tbody').querySelectorAll('tr')console.log(jPs,all);//设置全选按钮的事件all.onclick = function(){for( let i = 0;i < jPs.length; i++){jPs[i].checked = this.checked; //将全选的状态给每一个子选项}}for(let i = 0 ; i < jPs.length;i++){jPs[i].onclick = function(){// var sure=0for(let i=0;i<jPs.length;i++){if(!jPs[i].checked){ //当有一个没有选中时// sure =1all.checked=false; // 全选不会选中break;} all.checked=true}// if(sure==0){// all.checked=true// }else{// all.checked=false;// }}}//隔行变色for (let i = 0; i < trs.length; i++) {trs[i].onmouseover = function(){for (let i = 0; i < trs.length; i++) {trs[i].className=""}trs[i].className = 'color'}trs[i].onmouseout = function(){trs[i].className=''}}</script>
4. 简单计算器
<body><input type="text" id="num1" placeholder="请输入第一个数" /><input type="text" id="num2" placeholder="请输入第二个数" /><select name="" id="type"><option value="1">+</option><option value="2">-</option><option value="3">x</option><option value="4">/</option><option value="5">%</option></select><button>计算</button><span id="result"></span><script>var btn = document.querySelector("button"); //获取按钮元素var sum;btn.onclick = function () {var myselect = document.getElementById("type"); //点击时获取下拉菜单var x = document.getElementById("num1").value-0;//获取第一个框内元素var y = document.getElementById("num2").value-0;//获取第二个框内元素var index = myselect.selectedIndex; //获取下拉菜单的索引var num = myselect.options[index].value-0; //通过索引获取value值//上面拿到的数据都是字符串型,需要手动改为数字型//拿到选中项的索引// for (i = 0; i < myselect.length; i++) {// //下拉框的长度就是它的选项数.// if (myselect[i].selected == true) {// var text = myselect[i].value; //获取当前选择项的文本.// break;// }// }// console.log(num);switch(num){case 1:sum=(x+y);break;case 2:sum=( x-y);break;case 3:sum=(x*y) ;breakcase 4:sum=(x/y) ;break;case 5:sum=(x%y);break;}alert('值为'+sum)};</script></body>
5.动态生成表格
<style>table {width: 500px;margin: 100px auto;border-collapse: collapse;text-align: center;}td,th {border: 1px solid #333;}thead tr {height: 40px;background-color: #ccc;}</style></head><body><table cellspacing="0"><thead><tr><th>姓名</th><th>科目</th><th>成绩</th><th>操作</th></tr></thead><tbody></tbody></table><script>// 1.先去准备好学生的数据var datas = [{name: '魏璎珞',subject: 'JavaScript',score: 100}, {name: '弘历',subject: 'JavaScript',score: 98}, {name: '傅恒',subject: 'JavaScript',score: 99}, {name: '明玉',subject: 'JavaScript',score: 88}, {name: '大猪蹄子',subject: 'JavaScript',score: 0}];//生成表格var tbody = document.querySelector('tbody')// 根据行数来创建表格for (let i = 0; i < datas.length; i++) {//创建一个trvar tr = document.createElement('tr');//插入到tbody里tbody.appendChild(tr);// 给每个tr创建td,根据每个对象的属性数量创建单元格for (const k in datas[i]) {var td =document.createElement('td')tr.appendChild(td);// 将数据传给tdtd.innerHTML=datas[i][k]}// 添加删除var td = document.createElement('td');// 将最后一个td添加到tr里tr.appendChild(td)// td里添加a标签td.innerHTML='<a href="javascript:;">删除</a>';// 设置a标签的事件td.children[0].onclick = function(){tbody.removeChild(this.parentElement.parentElement);}}</script>
6.模态框
<!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>Document</title><style>.login-header {width: 100%;text-align: center;height: 30px;font-size: 24px;line-height: 30px;}ul,li,ol,dl,dt,dd,div,p,span,h1,h2,h3,h4,h5,h6,a {padding: 0px;margin: 0px;}.login {display: none;width: 512px;height: 280px;position: fixed;border: #ebebeb solid 1px;left: 50%;top: 50%;background: #ffffff;box-shadow: 0px 0px 20px #ddd;z-index: 9999;transform: translate(-50%, -50%);}.login-title {width: 100%;margin: 10px 0px 0px 0px;text-align: center;line-height: 40px;height: 40px;font-size: 18px;position: relative;cursor: move;}.login-input-content {margin-top: 20px;}.login-button {width: 50%;margin: 30px auto 0px auto;line-height: 40px;font-size: 14px;border: #ebebeb 1px solid;text-align: center;}.login-bg {display: none;width: 100%;height: 100%;position: fixed;top: 0px;left: 0px;background: rgba(0, 0, 0, 0.3);}a {text-decoration: none;color: #000000;}.login-button a {display: block;}.login-input input.list-input {float: left;line-height: 35px;height: 35px;width: 350px;border: #ebebeb 1px solid;text-indent: 5px;}.login-input {overflow: hidden;margin: 0px 0px 20px 0px;}.login-input label {float: left;width: 90px;padding-right: 10px;text-align: right;line-height: 35px;height: 35px;font-size: 14px;}.login-title span {position: absolute;font-size: 12px;right: -20px;top: -30px;background: #ffffff;border: #ebebeb solid 1px;width: 40px;height: 40px;border-radius: 20px;}</style></head><body><div class="login-header"><a id="link" href="javascript:;">点击,弹出登录框</a></div><div id="login" class="login"><div id="title" class="login-title">登录会员<span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span></div><div class="login-input-content"><div class="login-input"><label>用户名:</label><input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input" /></div><div class="login-input"><label>登录密码:</label><input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input" /></div></div><div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div></div><!-- 遮盖层 --><div id="bg" class="login-bg"></div><!-- script开始--><script>// 获取元素var login = document.querySelector('.login'),link = document.querySelector('#link'),close = document.querySelector('#closeBtn'),bg = document.querySelector('#bg');//开始设置开关遮盖层link.addEventListener('click',()=>{login.style.display='block'bg.style.display='block'})close.addEventListener('click',()=>{login.style.display='none'bg.style.display='none'})//拖动登录框var title = document.querySelector('#title');// 设置点击事件title.addEventListener('mousedown',(e)=>{var x = e.pageX-login.offsetLeft;var y = e.pageY-login.offsetTop;console.log(x,y);鼠标按下移动时事件document.onmousemove = (e)=>{login.style.left=e.pageX-x+'px'login.style.top=e.pageY-y+'px'}//松开鼠标按键取消拖动title.onmouseup=()=>{document.onmousemove='null'}})</script></body></html>
7.网页轮播图
轮播图也称为焦点图,是网页中比较常见的网页特效。
功能需求:
- 鼠标经过轮播图模块,左右按钮显示,离开隐藏左右按钮。
- 点击右侧按钮一次,图片往左播放一张,以此类推,左侧按钮同理。
- 图片播放的同时,下面小圆圈模块跟随一起变化。
- 点击小圆圈,可以播放相应图片。
- 鼠标不经过轮播图,轮播图也会自动播放图片。
- 鼠标经过,轮播图模块, 自动播放停止。
window.addEventListener('load', function() {// 1. 获取元素var arrow_l = document.querySelector('.arrow-l');var arrow_r = document.querySelector('.arrow-r');var focus = document.querySelector('.focus');var focusWidth = focus.offsetWidth;// 2. 鼠标经过focus 就显示隐藏左右按钮focus.addEventListener('mouseenter', function() {arrow_l.style.display = 'block';arrow_r.style.display = 'block';clearInterval(timer);timer = null; // 清除定时器变量});focus.addEventListener('mouseleave', function() {arrow_l.style.display = 'none';arrow_r.style.display = 'none';timer = setInterval(function() {//手动调用点击事件arrow_r.click();}, 2000);});// 3. 动态生成小圆圈 有几张图片,我就生成几个小圆圈var ul = focus.querySelector('ul');var ol = focus.querySelector('.circle');// console.log(ul.children.length);for (var i = 0; i < ul.children.length; i++) {// 创建一个小livar li = document.createElement('li');// 记录当前小圆圈的索引号 通过自定义属性来做li.setAttribute('index', i);// 把小li插入到ol 里面ol.appendChild(li);// 4. 小圆圈的排他思想 我们可以直接在生成小圆圈的同时直接绑定点击事件li.addEventListener('click', function() {// 干掉所有人 把所有的小li 清除 current 类名for (var i = 0; i < ol.children.length; i++) {ol.children[i].className = '';}// 留下我自己 当前的小li 设置current 类名this.className = 'current';// 5. 点击小圆圈,移动图片 当然移动的是 ul// ul 的移动距离 小圆圈的索引号 乘以 图片的宽度 注意是负值// 当我们点击了某个小li 就拿到当前小li 的索引号var index = this.getAttribute('index');// 当我们点击了某个小li 就要把这个li 的索引号给 numnum = index;// 当我们点击了某个小li 就要把这个li 的索引号给 circlecircle = index;// num = circle = index;console.log(focusWidth);console.log(index);animate(ul, -index * focusWidth);})}// 把ol里面的第一个小li设置类名为 currentol.children[0].className = 'current';// 6. 克隆第一张图片(li)放到ul 最后面var first = ul.children[0].cloneNode(true);ul.appendChild(first);// 7. 点击右侧按钮, 图片滚动一张var num = 0;// circle 控制小圆圈的播放var circle = 0;// flag 节流阀var flag = true;arrow_r.addEventListener('click', function() {if (flag) {flag = false; // 关闭节流阀// 如果走到了最后复制的一张图片,此时 我们的ul 要快速复原 left 改为 0if (num == ul.children.length - 1) {ul.style.left = 0;num = 0;}num++;animate(ul, -num * focusWidth, function() {flag = true; // 打开节流阀});// 8. 点击右侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放circle++;// 如果circle == 4 说明走到最后我们克隆的这张图片了 我们就复原if (circle == ol.children.length) {circle = 0;}// 调用函数circleChange();}});// 9. 左侧按钮做法arrow_l.addEventListener('click', function() {if (flag) {flag = false;if (num == 0) {num = ul.children.length - 1;ul.style.left = -num * focusWidth + 'px';}num--;animate(ul, -num * focusWidth, function() {flag = true;});// 点击左侧按钮,小圆圈跟随一起变化 可以再声明一个变量控制小圆圈的播放circle--;// 如果circle < 0 说明第一张图片,则小圆圈要改为第4个小圆圈(3)// if (circle < 0) {// circle = ol.children.length - 1;// }circle = circle < 0 ? ol.children.length - 1 : circle;// 调用函数circleChange();}});function circleChange() {// 先清除其余小圆圈的current类名for (var i = 0; i < ol.children.length; i++) {ol.children[i].className = '';}// 留下当前的小圆圈的current类名ol.children[circle].className = 'current';}// 10. 自动播放轮播图var timer = setInterval(function() {//手动调用点击事件arrow_r.click();}, 2000);})
8. 简单轮播图动画函数封装
let animate=(obj,target,callback)=>{ //三个形参 执行动画的对象 移动总长度 回调函数clearInterval(obj.timer);obj.timer=setInterval(()=>{//计算步长var step=(target-obj.offsetLeft)/10;// 判断是正还是负step=step>0? Math.ceil(step):Math.floor(step);if(obj.offsetLeft==0){clearInterval(obj.offsetLeft)if(callback()){callback()}}obj.style.left=obj.offsetLeft+step+'px'},15)}
