JavaScript(四)
1.图层移动:遇到右边距弹回来,遇到左边距再弹回去
2.鼠标拖拽移动图层:鼠标按住拖动图层,松开之后图层停留在鼠标松开的位置
3.通过点击关闭按钮将广告层隐藏:
4.折叠菜单:通过点击主菜单将子菜单进行展开或隐藏
5.实现循环播放广告:
6. 查询的信息分页:
图层移动:遇到右边距弹回来,遇到左边距再弹回去
主要是比较左边距和浏览器的边缘位置是否相同,如果相同就弹回
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .d1{ width:100px ; height:100px ; background-color: red; position:absolute ; left: 0px; top: 100px; } </style> <body> <input type="button" value="start" id="btnStart" name=""> <div class="d1"></div> </body> </html> <script type="text/javascript"> var d1=document.querySelector(".d1"); var btnStart=document.getElementById("btnStart"); btnStart.onclick=moveRight; //水平移动方向的标识,0表示向右移动,1表示向左移动 var h=0; //获取层的样式 var style=window.getComputedStyle(d1); function moveRight(){ var left=parseInt(style.left); //根据元素目前在的状态判断往哪走 if(h==0){ d1.style.left=left+1+"px"; } else{ d1.style.left=left-1+"px"; } //判断是否移动到浏览器的右边缘位置并修改标识 left=parseInt(style.left); if(left>=document.documentElement.clientWidth-d1.clientWidth){ h=1; } //判断是否移动到浏览器的左边缘位置并修改标识 else if(left<=0){ h=0; } window.setTimeout("moveRight()",10); } </script>
例子:图层能够在页面中斜下45度角移动。碰到页面边缘就弹回
主要是left和top同时进行位置的坐标改变
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .d1{ width: 100px; height: 100px; background-color: #2A7EB0; position: absolute; left: 200px; top: 300px; } </style> <body> <input type="button" value="start" id="btnStart" name=""> <div class="d1"></div> </body> </html> <script type="text/javascript"> var d1 = document.querySelector(".d1"); var btnStart = document.getElementById("btnStart"); btnStart.onclick = moveRight; //水平移动方向的标识 0表示向右移动 1表示向左移动 var h = 0; //垂直移动方向的标识 0表示向下移动 1表示向上移动 var v = 0; //获取层的样式 var style = window.getComputedStyle(d1); function moveRight(){ //获取层的左边距 var left = parseInt(style.left); //判断水平移动的方向 if(h == 0){
//如果是0则向右移动 d1.style.left = left+1+"px"; } else{
//如果是1则向左移动 d1.style.left = left-1+"px"; } //判断是否移动到浏览器右边缘位置(修改标识用来判断向哪个方向移动) left = parseInt(style.left);
//到达了右边界,修改为1开始向左移动 if(left >= document.documentElement.clientWidth-d1.clientWidth){ h = 1; } //判断浏览器左边缘的位置,到达了左边界,修改为0开始向右移动 else if(left <= 0){ h = 0; } //获取层的上边距 var top = parseInt(style.top); //判断垂直移动方向 if(v == 0){ d1.style.top = top+1+"px"; } else{ d1.style.top = top-1+"px"; } top = parseInt(style.top); console.log(top+","+(document.documentElement.clientHeight-d1.clientHeight)); //判断是否到达屏幕底部边缘(判断修改标识用来判断向哪个方向移动) if(top >= document.documentElement.clientHeight-d1.clientHeight){ v = 1; } else if(top <= 0){ v = 0; } window.setTimeout("moveRight()",10); } </script>
鼠标拖拽移动图层:鼠标按住拖动图层,松开之后图层停留在鼠标松开的位置
方法一:图层原来与页面的边距 + 鼠标移动的距离(鼠标当前的坐标-鼠标开始点击的坐标):原来的图层与页面边距、原鼠标点击坐标、鼠标当前的坐标
方法二:图层移动的距离(当前图层与页面的边距-原来图层与页面的边距)- 鼠标相较于图层的边距(鼠标的坐标-层的边距):鼠标相较于图层的边距、原来图层与页面的边距、当前图层与页面的边距
方法一:
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .d1{ width: 100px; height: 100px; background-color: #2A7EB0; position: absolute; left: 200px; top: 300px; } </style> <body> <div class="d1"></div> </body> </html> <script type="text/javascript"> /** * 层的拖拽思路: * 通过3个事件动作协同完成 * onmousedown * onmousemove * onmouseup */ var d1 = document.querySelector(".d1"); var style = window.getComputedStyle(d1); //鼠标的按下坐标 var x; var y; //层的初始边距 var initLeft; var initTop; //鼠标按下的状态 var hasDown = false; /** * 鼠标按下 * [onmousedown description] * @return {[type]} [description] */ d1.onmousedown = function(){ //记录鼠标按下的状态 hasDown = true; //记录鼠标按下的坐标 x = event.clientX; y = event.clientY; //记录当前层的边距 initLeft = parseInt(style.left); initTop = parseInt(style.top); } /** * 鼠标松开 * [onmouseup description] * @return {[type]} [description] */ d1.onmouseup = function(){ //修改鼠标按下的状态 hasDown = false; } /** * 页面中进行的鼠标移动 * [onmousemove description] * @return {[type]} [description] */ document.onmousemove = function(){ //如果鼠标按下 if(hasDown){ //记录移动中鼠标的坐标 var nowX = event.clientX; var nowY = event.clientY; //计算移动的距离 var moveX = nowX-x; var moveY = nowY-y; //根据移动的距离设置层的边距 d1.style.left = initLeft+moveX+"px"; d1.style.top = initTop+moveY+"px"; } } </script>
方法二:
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .d1{ width: 100px; height: 100px; background-color: #2A7EB0; position: absolute; left: 200px; top: 300px; } </style> <body> <div class="d1"></div> </body> </html> <script type="text/javascript"> /** * 层的拖拽思路: * 通过3个事件动作协同完成 * onmousedown * onmousemove * onmouseup */ var d1 = document.querySelector(".d1"); var style = window.getComputedStyle(d1); //按下点与层边框的距离 var x; var y; //鼠标按下的状态 var hasDown = false; /** * 鼠标按下 * [onmousedown description] * @return {[type]} [description] */ d1.onmousedown = function(){ //记录鼠标按下的状态 hasDown = true; //获取按下的鼠标坐标 var nowX = event.clientX; var nowY = event.clientY; //获取层的边距 var divLeft = parseInt(style.left); var divTop = parseInt(style.top); //计算鼠标坐标与边距的距离 x = nowX-divLeft; y = nowY-divTop; } /** * 鼠标松开 * [onmouseup description] * @return {[type]} [description] */ d1.onmouseup = function(){ //修改鼠标按下的状态 hasDown = false; } /** * 页面中进行的鼠标移动 * [onmousemove description] * @return {[type]} [description] */ document.onmousemove = function(){ //如果鼠标按下 if(hasDown){ //记录移动中鼠标的坐标 var nowX = event.clientX; var nowY = event.clientY; //根据按下鼠标与层的边距,计算层的边距 d1.style.left = nowX-x+"px"; d1.style.top = nowY-y+"px"; } } </script>
通过点击关闭按钮将广告层隐藏:
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .ad{ width: 180px; height: 230px; background-image: url(image/advpic.gif); position: absolute; left: 300px; top: 100px; } .ad>div{ width: 13px; height: 13px; background-image: url(image/close.jpg); position: relative; left: 167px; top: 217px; cursor: pointer; } </style> <body> <div class="ad"> <div onclick="closeAd()"></div>//按钮插在广告层中 </div> </body> </html> <script type="text/javascript"> //获取广告层 var ad = document.querySelector(".ad"); function closeAd(){ //将广告层隐藏 none表示隐藏 block表示显示 ad.style.display = "none"; } </script>
折叠菜单:通过点击主菜单将子菜单进行展开或隐藏
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .menu{ margin-left: 50px; } .menu li{ list-style-image: url(image/z-1.jpg); height: 30px; line-height: 30px; } .main{ height: 30px; cursor: pointer; } .subItem{ display: none; } </style> <body> <div class="menu"> <div class="main" onclick="showMenu(this)"><img src="image/fclose.gif">Java技术</div> <!-- 子菜单 --> <div class="subItem"> <li>JavaSE</li> <li>Java Web</li> <li>Eclipse</li> <li>Java其他相关</li> </div> </div> </body> </html> <script type="text/javascript"> //菜单是否展开的标识(展开点击就隐藏,隐藏点击就展开) var flag = false; /** * 展示菜单 * [showMenu description] * @return {[type]} [description] */ function showMenu(menu){ //菜单中的图片 var img = menu.getElementsByTagName("img")[0]; //子菜单 var subItem = document.querySelector(".subItem"); if(!flag){ //修改菜单的图片 img.src = "image/fold.gif"; //将子菜单显示 subItem.style.display = "block"; //修改菜单展开的标识 flag = true; } else{ //修改菜单的图片 img.src = "image/fclose.gif"; //将子菜单隐藏 subItem.style.display = "none"; //修改菜单展开的标识 flag = false; } } </script>
实现循环播放广告:
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .ad{ width: 360px; height: 190px; background-image: url(image/ad-01.jpg); } .ad div{ width: 20px; height: 20px; background-color: #2C61AF; color: white; float: left; position: relative; left: 280px; top: 170px; text-align: center; line-height: 20px; font-size: 13px; cursor: pointer; } #active{ background-color: white; color: #2C61AF; } </style> <body> <div class="ad"> <div>1</div> <div>2</div> <div id="active">3</div> <div>4</div> </div> </body> </html> <script type="text/javascript"> var ad = document.querySelector(".ad"); //播放图片的索引 var index = 1; /** * 轮播广告 * [playAd description] * @return {[type]} [description] */ function playAd(){ //变更图片 ad.style.backgroundImage = "url(image/ad-0"+index+".jpg)"; //修改图片索引 index++; if(index > 4){ index = 1; } //开启定时器(为了反复执行) window.setTimeout("playAd()",1000); } playAd(); </script>
查询的信息分页:
<!DOCTYPE html> <html> <head> <title></title> </head> <style type="text/css"> .pageContent{ height: 200px; } </style> <body> <div style="height: 3000px; background-color: #FDC7C7"></div> <div class="container"></div> </body> </html> <script type="text/javascript"> //每页的高度 var size = 200; //当前页码 var page = 1; //原始的页面高度,决定了在该位置的基础上进行滚动条下拉实现分页 var init = 1500; //总的页面数 var total = 15; //页面显示的容器 var container = document.querySelector(".container"); //滚动条的滚动事件 window.onscroll = function(){ //获取滚动的距离 //console.log(document.documentElement.scrollTop); var scrollTop = document.documentElement.scrollTop; //如果滚动的距离超过了原始页面高度,根据页码值决定分页的加载 if(scrollTop >= init+page*size && page <= total){ //加载分页的内容 container.innerHTML += "<div class='pageContent'><img src='image/head/"+page+".gif'></div>"; page++; } } </script>