【Python全栈-JavaScript】原生的JavaScript练习题1 原生的JavaScript练习题1
1、马蜂窝首页轮播图,点击右侧小图切换大图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>马蜂窝小图切大图</title> <script src="http://code.jquery.com/jquery-latest.js"></script> <style> *{ margin: 0; padding: 0; } .navtop{ 100%; height: 80px; border: 1px solid red; } .box{ 100%; height: 469px; background: url("https://n4-q.mafengwo.net/s14/M00/5A/1A/wKgE2l0HPWyAZjbdAAh88uDW96A246.jpg?imageMogr2%2Finterlace%2F1") no-repeat; } .items{ auto; float: right; margin-right: 50px; } .items ul li{ list-style: none; margin-top: 10px; } .items ul li img{ box-shadow: 3px 3px 3px rgba(0,0,0,0.4); } </style> </head> <body> <div class="navtop"></div> <div class="box"> <div class="items"> <ul> <li><img src="https://b3-q.mafengwo.net/s14/M00/59/F7/wKgE2l0HPWGANdPpAAOFydOQemM938.jpg?imageMogr2%2Fthumbnail%2F%21108x67r%2Fgravity%2FCenter%2Fcrop%2F%21108x67%2Fquality%2F90" alt="https://n4-q.mafengwo.net/s14/M00/5A/1A/wKgE2l0HPWyAZjbdAAh88uDW96A246.jpg?imageMogr2%2Finterlace%2F1" class="img1"></li> <li><img src="https://b3-q.mafengwo.net/s14/M00/0D/42/wKgE2l0F9xqARmclAARH5okYze0213.jpg?imageMogr2%2Fthumbnail%2F%21108x67r%2Fgravity%2FCenter%2Fcrop%2F%21108x67%2Fquality%2F90" alt="https://p4-q.mafengwo.net/s14/M00/0D/55/wKgE2l0F9ySACWS7AAoBg9iDjMg958.jpg?imageMogr2%2Finterlace%2F1" class="img2"></li> <li><img src="https://b2-q.mafengwo.net/s14/M00/B8/CE/wKgE2l0DuPeAb02GAAIzNXLecjo214.jpg?imageMogr2%2Fthumbnail%2F%21108x67r%2Fgravity%2FCenter%2Fcrop%2F%21108x67%2Fquality%2F90" alt="https://n3-q.mafengwo.net/s14/M00/B8/DC/wKgE2l0DuP2AHat-AASQQa6cZh8825.jpg?imageMogr2%2Finterlace%2F1" class="img3"></li> <li><img src="https://p1-q.mafengwo.net/s14/M00/96/03/wKgE2l0ApbOANYknAAKfN3ZDPYk233.jpg?imageMogr2%2Fthumbnail%2F%21108x67r%2Fgravity%2FCenter%2Fcrop%2F%21108x67%2Fquality%2F90" alt="https://p2-q.mafengwo.net/s14/M00/96/1E/wKgE2l0Apb6ALPI7AAVoCZo1rO0261.jpg?imageMogr2%2Finterlace%2F1" class="img4"></li> <li><img src="https://n3-q.mafengwo.net/s14/M00/A1/9E/wKgE2l0AqkaAcT95AAe4qI2trZ4696.jpg?imageMogr2%2Fthumbnail%2F%21108x67r%2Fgravity%2FCenter%2Fcrop%2F%21108x67%2Fquality%2F90" alt="https://b4-q.mafengwo.net/s14/M00/A1/B3/wKgE2l0Aqk2AOj23ABBx6Vg2SBw520.jpg?imageMogr2%2Finterlace%2F1" class="img5"></li> </ul> </div> </div> </body> <script> window.onload = function () { var $imgs = document.querySelectorAll('li img'); const $box = document.querySelector('.box'); //鼠标点击 $imgs.forEach(value => value.onclick = function () { // console.log(this.getAttribute("alt")); // console.log($box); $box.style.backgroundImage = "url(" + this.getAttribute("alt") + ")"; //原生的JS // $(".box").css("background-image","url(" + this.getAttribute("alt") + ")") //使用jquery的css() }); /*//鼠标onmouseover $imgs.forEach(value => value.onmouseover = function () { $box.style.backgroundImage = "url(" + this.getAttribute("alt") + ")"; //原生的JS });*/ }; </script> </html>
2、使用双重循环写乘法口诀表
源码示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>表格+乘法口诀表</title> <style> table{ border-collapse: collapse; } th{ border: 1px solid black; 150px; height: 40px; text-align: center; } td{ border: 1px solid black; 150px; height: 40px; text-align: center; } </style> </head> <body> <div class="tableBox"></div> </body> <script> window.onload = function () { var $table = document.querySelector('.tableBox'); var $str = "<table>"; $str += "<tr><th>乘法口诀表9*9</th></tr>"; // console.log($createTable); for(var i=1;i<=9;i++){ $str +="<tr>"; for(var j=1;j<=i;j++){ $str += "<td>"+ j + " X "+ i +" = "+ i*j +"</td>"; } $str +="</tr>" } $str +="</table>"; console.log(typeof $str,$str); $table.innerHTML = $str; //将字符串转为对应的html对象 }; </script> </html>
3、使用循环完成水仙花数100-999 370=3*3*3+7*7*7+0*0*0
源码示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>使用循环完成水仙花数100-999 370=3*3*3+7*7*7+0*0*0</title> </head> <body> </body> <script> window.onload = function () { for(var i = 100;i<=999;i++){ //分别求出数的个位 十位 百位 var a = i%10; var b = parseInt(i/10)%10; var c = parseInt(i/100)%10; if(i === a**3+b**3+c**3){ console.log(i); } } }; </script> </html>
4、创造50个div,要求div是正方形,随机大小,随机在页面的任意位置(1400*720),随机颜色
效果:
源码示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>创造50个div,要求div是正方形,随机大小,随机在页面的任意位置(1400*720),随机颜色</title> <style> .outer{ 1400px; height: 720px; border: 2px solid darkred; position: absolute; } .btnBox{ position: relative; left: 10px; top: 740px; } button{ 200px; height: 36px; background: rgba(0,0,0,0.6); color: white; font-size: 20px; text-align: center; line-height: 30px; border-radius: 6px; margin: auto; } .random{ display: inline-block; position: fixed; border: 1px solid black; } </style> </head> <body> <div class="outer"></div> <div class="btnBox"> <button class="createDiv">创建div</button> <button class="pos_color">生成随机位置和颜色</button> </div> </body> <script> window.onload = function () { const dire = 100; const widthRate = 1400; const heightRate = 720; var $box = document.querySelector('.outer'); var $createDiv = document.querySelector('.createDiv'); var $pos_color = document.querySelector('.pos_color'); $createDiv.addEventListener('click',clickHandler); $pos_color.addEventListener('click',clickHandler); function clickHandler() { switch (this) { case $createDiv: for(var i=0;i<50;i++){ $div = document.createElement('div'); $div.setAttribute('class','random'); $box.appendChild($div); } break; case $pos_color: $item = document.querySelectorAll('.random'); $item.forEach(function (value,index,array) { $lw = parseInt(Math.random()*dire).toString(); value.style.width = $lw+"px"; value.style.height = $lw+"px"; $left = (parseInt(Math.random()*widthRate)).toString(); $top = (parseInt(Math.random()*heightRate)).toString(); value.style.left = $left + "px"; value.style.top = $top + "px"; value.style.backgroundColor = randomColor() }); break; } } function randomColor() { //生成随机的颜色 #171717 #00FF00 表示rgb(r:0-255 十六进制写法用两位数可以表示,最大是FF,小于16的前面补0) var colorStr = "#"; for(var i=0;i<3;i++){ cc = parseInt(Math.random()*256); if(cc<15){ cc = "0"+cc.toString(16) }else{ cc = cc.toString(16) } colorStr+=cc } return colorStr } }; </script> </html>
补充:3种遍历方式
//遍历每一个多选框 有三种写法 // for(var i=0;i<4;i++){ // item = document.querySelector(".ck"+i); // item.checked = allCheck.checked // } // allItem.forEach(function (value,index,array) { // value.checked = allCheck.checked // }) allItem.forEach(key => key.checked = true)
五、自定制电子时钟
效果:
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定制电子时钟</title> <style> .outer{ position: relative; margin: auto; } .outer div{ float: left; 200px; height: 165px; border: 1px solid red; background: url("img/num.png"); overflow: hidden; background-position-x: -200px ; background-position-y: -170px ; } .outer span{ float: left; font-size: 26px; font-weight: 600; text-align: center; line-height: 165px; } </style> </head> <body> <div class="outer"> <div ></div> <div ></div><span>:</span> <div ></div> <div ></div><span>:</span> <div ></div> <div ></div> </div> </body> <script> var $hour1,$hour2,$minute1,$minute2,$second1,$second2; // 0 1 2 3 4 5 6 7 8 9 的坐标位置 var pointArray = [ {x:820,y:170}, {x:0,y:0}, {x:205,y:0}, {x:410,y:0}, {x:615,y:0}, {x:820,y:0}, {x:0,y:170}, {x:205,y:170}, {x:410,y:170}, {x:615,y:170}, ]; init(); function init() { $hour1 = document.querySelector("#hour1"); $hour2 = document.querySelector("#hour2"); $minute1 = document.querySelector("#minute1"); $minute2 = document.querySelector("#minute2"); $second1 = document.querySelector("#second1"); $second2 = document.querySelector("#second2"); // 开启定时器 setInterval(animation,1000) } function animation() { var date = new Date(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); /*console.log(typeof hour); //number 类型,要将其改为字符串类型 console.log(typeof getString(minute)); console.log(second);*/ setImg($hour1,getString(hour)[0]); setImg($hour2,getString(hour)[1]); setImg($minute1,getString(minute)[0]); setImg($minute2,getString(minute)[1]); setImg($second1,getString(second)[0]); setImg($second2,getString(second)[1]); } function getString(num) { return num<10? "0"+num:num.toString() } function setImg(ele,num) { ele.style.backgroundPositionX = -pointArray[Number(num)].x+"px"; ele.style.backgroundPositionY = -pointArray[Number(num)].y+"px"; } </script> </html>
六、将时间显示为中文可读格式
效果:
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>中文时间</title> </head> <body> <div class="outer"> <h1>Mon Jun 24 2019 19:43:16 ---> 二零一九年 六月 二十四日 星期一 十九时 四十三分 十六秒</h1> <h2></h2> </div> </body> <script> var chr=["零","一","二","三","四","五","六","七","八","九"]; var weeks=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; init(); setInterval(init,1000); function init() { var date = new Date(); /*console.log(date); console.log(date.getFullYear()); //年 console.log(date.getMonth()+1);//月 从(0-11),要在原基础上+1 console.log(date.getDate()); //日 console.log(date.getDay());//星期(0-6) 0表示星期日 console.log(date.getHours()); console.log(date.getMinutes()); console.log(date.getSeconds());*/ var year = date.getFullYear().toString(); var month = date.getMonth()+1; var datee = date.getDate(); var day = date.getDay(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); year = num2chr(year) + "年 "; month = digits2(month) +"月 "; datee = digits2(datee) +"日 "; week = weeks[day]+ " "; hour = digits2(hour) + "时 "; minute = digits2(minute) + "分 "; second = digits2(second) + "秒 "; document.querySelector(".outer h2").innerHTML = year+month+datee+week+hour+minute+second; } //年份转化 如:2019 --->二零一九年 function num2chr(str) { var _str = ""; for(var i=0;i<str.length;i++){ _str += chr[str[i]] } return _str } //数字转化 如:24 --->二十四 function digits2(num) { if(num<10){ return chr[num] } var shiwei = parseInt(num/10); var gewei = num%10; return gewei?chr[shiwei]+"十"+chr[gewei]:chr[shiwei]+"十"; } </script> </html>
七、轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>轮播图</title> <style> *{ margin: 0; padding: 0; } #rollImg{ 1280px; height: 426px; margin: auto; position: relative; overflow: hidden; } #imgCon{ 6400px; height: 426px; transition: all 1s; font-size: 0; /*消除图片之间空格*/ position: absolute; left: 0; } #imgCon img{ 1280px; height: 426px; } #leftBtn{ position: absolute; top: 200px; left: 0; } #rightBtn{ position: absolute; top: 200px; right: 0; } #dotControl{ list-style: none; position: absolute; left: 500px; bottom: 10px; } #dotControl li{ 16px; height: 16px; border: 2px solid red; border-radius: 8px; float: left; margin-left: 10px; background-color: rgba(255,0,0,0.5); } </style> </head> <body> <div > <div > <img src="img/a.jpeg"> <img src="img/b.jpeg"> <img src="img/c.jpeg"> <img src="img/d.jpeg"> <img src="img/e.jpeg"> </div> <ul > <!-- 根据img个数动态生成小圆点--> <!--<li></li> <li></li> <li></li> <li></li> <li></li>--> </ul> <img > <img > </div> </body> <script> var $imgCon,leftbtn,rightbtn,$dotControl,liList; var position = 0; init(); function init() { $imgCon = document.querySelector("#imgCon"); $dotControl = document.querySelector("#dotControl"); leftbtn = document.querySelector("#leftBtn"); rightbtn = document.querySelector("#rightBtn"); // 根据图片个数创建小圆点,并添加事件 imgs = $imgCon.querySelectorAll('img'); for(var i=0;i<imgs.length;i++){ node = document.createElement("li"); $dotControl.appendChild(node); //给每个li节点添加点击事件 node.addEventListener('click',liClickHandler); } liList = document.querySelectorAll("#dotControl li"); liList[0].style.backgroundColor="blue"; //给前进后退按钮添加点击事件 leftBtn.addEventListener('click',clickHandler); rightBtn.addEventListener('click',clickHandler); } function liClickHandler(e) { position = Array.from(liList).indexOf(this); imgConMove(); } function clickHandler() { if(this ===leftbtn){ position--; if(position<0){position=4} imgConMove(); return; } position++; if(position>4){position=0} imgConMove(); } function imgConMove() { $imgCon.style.left = -1280*position+"px"; console.log(liList[position]); liList.forEach(function (item,index) { if(index===position){ item.style.backgroundColor="blue"; }else{ item.style.backgroundColor="rgba(0,0,0,0)"; } }) } </script> </html>