当前位置: 首页 > article >正文

js常见特效

目录

 选项卡

思路:

        ①自定义索引

        ②干掉所有人:先将所有按钮的类名都清空,内容隐藏none(for循环)

        ③复活我自己:之后给当前点击的按钮添加类名,将对应的内容通过自定义索引显示出来

全选效果

        全选

        单选【双层循环,single点击事件中也有一层循环】

        方法一:用变量/数组记录single选中的个数,若其与single复选框总个数相同,则all选中

        方法二:在for循环中利用break,只要有一个single为false,则all为false并跳出循环  若single都为true(不执行判断里面的),则all也为true

吸顶导航栏

②页面中添加滚动事件 window.onscroll

        ①获取导航条距离文档顶部的高度nav.offsetTop(滚动事件外面)

③滚动事件中,获取滚动的网页高度

④判断 滚动网页高度>=菜单距离文档顶部高度

⑤大于修改导航条样式为固定定位fixed,修改 left 和 top 值将其固定在顶部

⑥小于则导航条样式为相对定位relative,修改top值为0

⑦【增加功能】设置占位符,剔除抖动

封装一个倒计时函数

持续更新中...                谢谢关注



 选项卡

【重:设置自定义索引】

思路:

        ①自定义索引

        排他思想:

        ②干掉所有人:先将所有按钮的类名都清空,内容隐藏none(for循环)

        ③复活我自己:之后给当前点击的按钮添加类名,将对应的内容通过自定义索引显示出来

<div id=container><div id="title"><div class="active">标题1</div><div>标题2</div><div>标题3</div><div>标题4</div></div><div id="content"><div>内容1</div><div>2</div><div>内容3</div><div>内容4</div></div>
</div>
*{margin: 0;padding: 0;box-sizing: border-box;
}
#container{width: 500px;height: 350px;border: 1px solid #888;border-radius: 8px;margin: 50px auto;overflow: hidden;
}
#title {display: flex;justify-content: space-around;border-bottom: 2px solid red;
}
#title div{width: 25%;height: 30px;text-align: center;line-height: 30px;cursor: pointer;          
}.active{background-color: red;color: white;font-size: 18px;}
#content div{font-size: 30px;padding: 20px 30px;display: none;
}
#content div:nth-of-type(1){display: block;
}
// 获取标签元素
var _title=document.getElementById('title')
var _titleDivS=_title.getElementsByTagName('div')
var _content=document.getElementById('content')
var _contentDivS=_content.getElementsByTagName('div')
// 添加点击事件
for(var i=0;i<_titleDivS.length;i++){// 设置自定义属性_titleDivS[i].index=i_titleDivS[i].onclick=function(){// 标题样式更换// 清空所有标题样式for(var m=0;m<_titleDivS.length;m++){_titleDivS[m].className=''//将所有内容隐藏contentDivS[m].style.display='none'}// 显示当前标题样式this.className='active'// 显示当前标签对应内容_contentDivS[this.index].style.display='block'}
}

全选效果

        全选

                all选中则每个single都选中,all为选中则每个single都为选中

_all.onclick = function () {for (var i = 0; i < _single.length; i++) { //若果all选中,则所有single也选中,否则所有single都为选中false        if (_all.checked) {_single[i].checked = true } else {_single[i].checked = false}}
}

        单选【双层循环,single点击事件中也有一层循环】

                所有single复选框都选中,all复选框才选中;只要有一个single未选中,则all为false

        方法一:用变量/数组记录single选中的个数,若其与single复选框总个数相同,则all选中

for (var i = 0; i < _single.length; i++) {_single[i].onclick = function () {var arr = []// var number = 0;//记录选中的个数for (var j = 0; j < _single.length; j++) {if (_single[j].checked) {arr.push(_single[j])// number++;}}_all.checked = (_single.length == arr.length)// _all.checked = (_single.length == number)} 
}

        方法二:在for循环中利用break,只要有一个single为false,则all为false并跳出循环  若single都为true(不执行判断里面的),则all也为true

             

for (var i = 0; i < _single.length; i++) {_single[i].onclick = function () {for (var j = 0; j < _single.length; j++) {if (!_single[j].checked) {_all.checked = false break }_all.checked=true} } 
}

吸顶导航栏

②页面中添加滚动事件 window.onscroll

        ①获取导航条距离文档顶部的高度nav.offsetTop(滚动事件外面)

③滚动事件中,获取滚动的网页高度

        document.documentElement.offsetHeight||document.body.scrollTop

④判断 滚动网页高度>=菜单距离文档顶部高度

⑤大于修改导航条样式为固定定位fixed,修改 left 和 top 值将其固定在顶部

⑥小于则导航条样式为相对定位relative,修改top值为0

⑦【增加功能】设置占位符,剔除抖动

        实现吸顶功能时,到了临界位置时,页面会抖动一下,因为当导航条fixed出去,下部内容填补了导航条离开的位置。抢占了导航条的位置,所以抖动了一下。此处我们设置一个占位符,守住导航条的位置

css

* {margin: 0;padding: 0;
}
#box1,
#box2,
#box3 {width: 100%;
}#box1 { height: 150px;background-color: pink;
}#box2 {height: 480px;background-color: orangered;
}#box3 {height: 480px;background-color: yellowgreen;
}#header,
#nav {position: relative;/* top: 0; */width: 100%;height: 40px;background-color: rgb(47, 23, 23);
}.fix {position: fixed;top: 0;left: 0;
}

 HTML,js

/*<div id="box1"></div>
<div id="header"></div>
<div id="box2"></div>
<div id="box3"></div>
<div id="nav"></div>
<div id="box2"></div>
<div id="box3"></div>*///获取导航条
var _header = document.getElementById('header')
var _nav = document.getElementById('nav')//7.添加占位符,去除抖动//获得页面中导航条相对于浏览器视窗的位置
var rect = _header.getBoundingClientRect();  
var inser = document.createElement("div");
_header.parentNode.replaceChild(inser, _header);
inser.appendChild(_header);
inser.style.height = rect.height + "px"; //1.获取导航条距离文档顶部距离
var ht = _header.offsetTop
var nt = _nav.offsetTop - _header.offsetHeight//2.滚动事件
window.onscroll = function () {//第一个导航条//3-4.判断if (ht <= document.documentElement.scrollTop) {//5.导航条高度小于等于滚动条滑动高度,将其设置为固定定位,并修改left,top/* _header.style.position = 'fixed'_header.style.top = '0px' */fn(_header,'fixed','0px')} else {//6.导航条高度大于滚动条滑动高度,设置为相对定位,修改top// _header.style.position = 'relative'fn(_header,'relative','0px')}//第二个导航条if (nt <= document.documentElement.scrollTop) {/* _nav.style.position = 'fixed'_nav.style.top = '40px' */fn(_nav,'fixed','40px')} else {/* _nav.style.position = 'relative'_nav.style.top = 0 */fn(_nav,'relative','0px')}
}
//封装函数,优化代码
function fn(ele,pos,topVal){ele.style.position=posele.style.top=topVal
}

封装一个倒计时函数

function fn(time){// 当前时间var currentDate= new Date()// 设置未来时间var futureDate=new Date(time)var fd=futureDate.toLocaleDateString()// 时间差var interval=futureDate-currentDateinterval=interval/1000var day=parseInt(interval/(60*60*24))var h=parseInt(interval%(60*60*24)/(60*60))var min=parseInt(interval%(60*60)/(60))var s=parseInt(interval%(60))// console.log(day,h,min,s)// return [day,h,min,s]_p.innerText='距离'+fd+'还剩: '+day+'天 '+h+'时 '+min+'分 '+s+'秒'} fn()   setInterval("fn('2021/11/11')",1000)

持续更新中...                谢谢关注

http://www.lryc.cn/news/2413642.html

相关文章:

  • 了解遗传算法
  • Web.xml配置之context-param
  • 密码学 / PKI 体系概述
  • C++ 算法篇 深度优先搜索(DFS)
  • 《帝国时代3:决定版》dll丢失?修复x3daudio1_7.dll文件指南
  • Ubuntu 中 安装ulipad 发现无法更新软件库,无法安装python-wxgtk2.8
  • APIHOOK实例剖析
  • InstallSeield安装及破解
  • 胡立阳七招
  • 史上最详细的Linux使用手册(持续更新中)
  • 火狐下载 firefox免费高速下载 firefox又出新版本了
  • 博雅书社网上书店系统的设计与实现
  • 车载电脑(car pc)
  • 基于Java实现医院网上预约挂号管理系统-任务书参考
  • 腾讯qq2014官方正式版 v6.3.12390 免费版
  • SpringBoot单元测试详解
  • awk数组
  • fw150um无线网卡linux驱动,fw150um无线网卡驱动
  • CreateTextFile 文件的使用
  • Cloudflare设置流程 免费CDN加速你的网站【2024年最新】
  • maven 构建报错 This failure was cached in the local repository and resolution is not reattempted until t
  • pert计算公式期望值_PERT方法:用于计算各工序和工时的方法
  • Java基础总结(不断更新)
  • Windows 10 下修改 smb 连接的默认端口(445)
  • VBScript脚本语言基础
  • 显示visual studio试用版序列号输入框小程序_Visual Studio 2008试用版的评估期已经结束 的解决方法...
  • OEM版Win7激活原理
  • nginx根据三级域名不同来访问不同资源
  • VNC远程桌面使用方法
  • HDU 2246 神题?一千多行