JS
JS
js中==与===的区别
swiper插件的使用
利用location对象的href属性实现数秒自动跳转功能
放大器效果
关于Lodash,一个一致性、模块化、高性能的 JavaScript 实用工具库。
使用ladash的_.debounce(func, [wait=0], [options=])实现防抖处理
通过lodash,实现音频/视频的断点续播功能
js中==与===的区别
Js中==:用来进行一般比较检测两个操作数是否相等,可以允许进行类型转换 ===:用于严格比较,只要类型不匹配就返回flase。 对于string,number等基础类型,==和===是有区别的: 比如: "1" == true类型不同,"=="先做类型转换,把true转换为1,即为 "1" == 1;此时,类型仍不同,继续进行类型转换,把"1"转换为1,即为 1 == 1。 如果比较:"1" === true 左侧为字符型,右侧为布尔型或数值型,左右两侧类型不同,结果为false; 如果比较: 1 === 1 左侧为数值型,右侧也为数值型,左右两侧类型相同,数值大小也相同,结果为true; 如果比较: 1 === 2 左侧为int数值型,右侧为int数值型,左右两侧类型相同,但数值大小不同,结果为false。 但是对于Array,Object等高级类型,==和===是没有区别的。 以上为js中==和===的区别。
swiper插件的使用
1、上swiper.com.cn网站; 2、点击下载相应的swiper完整包; 3、下载完成后,在package目录下,找到js和css子目录,复制到自己的项目目录下; 4、在自己的html中引入js和css文件: <link ref=stylesheet href="./css/swiper.min.css"> ......... <script src="./js/swiper.min.js"></script> 5、在swiper.com.cn中找到自己想要的样式,将对应的样式文件和html代码,拷贝到自己的html中即可
利用location对象的href属性实现数秒自动跳转功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> span { color:red; } </style> </head> <body> <a href="http://www.baidu.com">支付成功<span>5</span>秒钟之后跳转到首页</a> <script> //1.获取元素 const a=document.querySelector('a') //2.开启定时器 //3.声明倒计时变量 let num=5 let timerId=setInterval(function(){ num-- a.innerHTML=`支付成功<span>${num}</span>秒钟之后跳转到首页` if(num===0){ clearInterval(timerId) location.href='http://www.baidu.com' //利用location对象的href属性实现跳转 } },1000) </script> </body> </html>
放大器效果
说明:1)主要要找4张图片,"../images/1.jpg" 2)small middle large 三个为定义的盒子 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>放大器效果</title> <style> .container{ display:flex; margin:200px; } .small{ } .small li{ padding:0; margin-top:0; margin-bottom:6px; width:45px; height:45px; } .small img{ padding:0; width:100%; height:100% } .active{ border:1px solid red;! } .middle{ display:flex; width:200px; height:200px; border:1px solid #000; positon:relative; } .middle img{ width:100%; height:100% } .layer{ width:100px; height:100px; border:2px solid blue; border-radius:50%; <!-- margin-left:-200px;--> display:none; position:absolute; } .large{ margin-left:-45px; width:200px; height:200px; border:1px solid #000; display:none; background-image: url("../images/1.jpg"); background-size:400px 400px; } </style> </head> <body> <div class="container"> <div class="middle" > <img src="../images/1.jpg"> <div class="layer"></div> </div> <div class="small"> <ul style="list-style: none;padding:0;margin:0;"> <li class="active"> <img src="../images/1.jpg"> </li> <li > <img src="../images/2.jpg"> </li> <li > <img src="../images/3.jpg"> </li> <li> <img src="../images/4.jpg"> </li> </ul> </div> <div class="large"> </div> </div> <script> //获取标签 const small=document.querySelector('.small') const middle=document.querySelector('.middle') const large=document.querySelector('.large') //小盒子切换 small.addEventListener('mouseover',function(e){ if (e.target.tagName==='IMG'){ //console.log(111) //清空当前所有的‘active’ this.querySelector('.active').classList.remove('active') //给img标签的父节点,也就是li标签,添加‘active’属性 e.target.parentNode.classList.add('active') //获取当前小图片的src <!-- console.log(e.target.src)--> //更换中盒子中的img的src地址 middle.querySelector('img').src=e.target.src //更换大盒子的背景图片的src地址 large.style.backgroundImage=`url(${e.target.src})` } }) //鼠标经过中盒子,大盒子显示 middle.addEventListener('mouseenter',show) middle.addEventListener('mouseleave',hide) let timeId=0//定义定时器 //显示函数 function show(){ //先清除定时器 clearTimeout(timeId) large.style.display='block' } //延迟隐藏函数 function hide(){ timeId=setTimeout(function(){ large.style.display='none' },1000) } //鼠标经过大盒子,大盒子保持显示 large.addEventListener('mouseenter',show) large.addEventListener('mouseleave',hide) //鼠标经过中盒子,选择器显示 const layer=document.querySelector('.layer') middle.addEventListener('mouseenter',function(e){ layer.style.display='block' <!-- console.log(e)--> }) middle.addEventListener('mouseleave',function(){ layer.style.display='none' }) //放大选择器移动 middle.addEventListener('mousemove',function(e){ //鼠标在页面中的坐标 <!-- console.log(e.pageX,e.pageY)--> //middle盒子的坐标 <!-- console.log(middle.getBoundingClientRect().left,middle.getBoundingClientRect().top)--> //当发生想上滚动时,增加滚动量纠偏 <!-- console.log('scrollTop',document.documentElement.scrollTop)--> <!-- let x=e.pageX-middle.getBoundingClientRect().left--> <!-- let y=e.pageY-middle.getBoundingClientRect().top--> let x=e.pageX-50 //将鼠标放在选择器的中间 <!-- let y=e.pageY-50-document.documentElement.scrollTop//将鼠标放在选择器的中间--> let y=e.pageY-50 //以下为设置选择器不出middle边框 if(x<middle.getBoundingClientRect().left+50){ x=middle.getBoundingClientRect().left } if(y<middle.getBoundingClientRect().top+50+document.documentElement.scrollTop){ y=middle.getBoundingClientRect().top+document.documentElement.scrollTop } if(x>middle.getBoundingClientRect().left+100){ x=middle.getBoundingClientRect().left+100 } if(y>middle.getBoundingClientRect().top+100+document.documentElement.scrollTop){ y=middle.getBoundingClientRect().top+100+document.documentElement.scrollTop } if(x>=middle.getBoundingClientRect().left+50 && x<=middle.getBoundingClientRect().left+100){ x=x} if(y>=middle.getBoundingClientRect().left+50+document.documentElement.scrollTop && y<=middle.getBoundingClientRect().top+100+document.documentElement.scrollTop){ y=y} console.log('x,y',x,y) //将坐标值赋给选择器 layer.style.left=x+'px' layer.style.top=y+'px' //将坐标值放大2倍,赋值给大盒子的背景图片 large.style.backgroundPositionX=-2*x+'px' large.style.backgroundPositionY=-2*y+'px'//背景图片的移动方向刚好时反的,所以用‘-’ }) </script> </body> </html>
关于Lodash,一个一致性、模块化、高性能的 JavaScript 实用工具库。
Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。 Lodash 遵循 MIT 开源协议发布,并且支持最新的运行环境。 查看各个构件版本的区别并选择一个适合你的版本。 https://www.lodashjs.com/ 为什么选择 Lodash ? Lodash 通过降低 array、number、objects、string 等等的使用难度从而让 JavaScript 变得更简单。 Lodash 的模块化方法 非常适用于: 遍历 array、object 和 string 对值进行操作和检测 创建符合功能的函数 安装 浏览器环境: <script src="lodash.js"></script> 通过 npm: $ npm i -g npm $ npm i --save lodash Node.js: // Load the full build. var _ = require('lodash'); // Load the core build. var _ = require('lodash/core'); // Load the FP build for immutable auto-curried iteratee-first data-last methods. var fp = require('lodash/fp'); // Load method categories. var array = require('lodash/array'); var object = require('lodash/fp/object'); // Cherry-pick methods for smaller browserify/rollup/webpack bundles. var at = require('lodash/at'); var curryN = require('lodash/fp/curryN');
使用ladash的_.debounce(func, [wait=0], [options=])实现防抖处理
_.debounce(func, [wait=0], [options=]) 创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。 注意: 如果 leading 和 trailing 选项为 true, 则 func 允许 trailing 方式调用的条件为: 在 wait 期间多次调用防抖方法。 如果 wait 为 0 并且 leading 为 false, func调用将被推迟到下一个点,类似setTimeout为0的超时。 SeeDavid Corbacho's articlefor details over the differences between_.debounce and_.throttle. 添加版本 0.1.0 参数 func (Function): 要防抖动的函数。 [wait=0] (number): 需要延迟的毫秒数。 [options=] (Object): 选项对象。 [options.leading=false] (boolean): 指定在延迟开始前调用。 [options.maxWait] (number): 设置 func 允许被延迟的最大值。 [options.trailing=true] (boolean): 指定在延迟结束后调用。 返回 (Function): 返回新的 debounced(防抖动)函数。 例子 // 避免窗口在变动时出现昂贵的计算开销。 jQuery(window).on('resize', _.debounce(calculateLayout, 150)); // 当点击时 `sendMail` 随后就被调用。 jQuery(element).on('click', _.debounce(sendMail, 300, { 'leading': true, 'trailing': false })); // 确保 `batchLog` 调用1次之后,1秒内会被触发。 var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); var source = new EventSource('/stream'); jQuery(source).on('message', debounced); // 取消一个 trailing 的防抖动调用 jQuery(window).on('popstate', debounced.cancel);
通过lodash,实现音频/视频的断点续播功能
说明:1.mp4需要自己找一段视频来测试。 <!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> </head> <body> <div class="video"> <video src="../studyjs/images/1.mp4" width="500" controls></video> </div> <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script> <script> console.log('nihao') const video = document.querySelector('video') video.ontimeupdate = _.throttle(() => { console.log(video.currentTime) //获得当前的视频时间 localStorage.setItem('currentTime', video.currentTime) }, 1000) //打开页面,重新获取断点时间,开始播放 video.onloadeddata = () => { video.currentTime = localStorage.getItem('currentTime') || 0 } </script>