电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

js實現跳一跳小游戲

瀏覽:132日期:2024-04-27 11:54:43

本文實例為大家分享了js實現跳一跳小游戲的具體代碼,供大家參考,具體內容如下

效果

js實現跳一跳小游戲

流程分析

1、鼠標按下開始蓄力2、鼠標松開,根據鼠標按下的時間讓小球運動相應的距離3、判斷小球落點是否在平臺內4、如果在平臺范圍內,產生下一個平臺,分數加10.如果不在游戲結束,判斷分數是否大于歷史最高分,更新歷史最高分。

動畫效果

5、鼠標按下小球所在平臺要有蓄力效果,鼠標松開后慢慢恢復,6、小球在空中的運動曲線要平滑7、小球和平臺要有3D效果

注意事項

8、運動涉及到計算器和延時器,要注意清除定時器以免擾亂動畫效果9、鼠標按下和松開為一個完整的流程,在小球運動完之前不能重復觸發10、確保小球運動的時間與鼠標按下的時間相關聯

布局

<div class='wrap'> <h3 class='tit'>鼠標按下蓄力,松開鼠標小球開始運動</h3> <h1>分數:</h1> <h2>歷史最高:</h2> <div class='con'></div> <div class='blc1'></div></div>

樣式

* { margin: 0; padding: 0; } .wrap { height: 500px; position: relative; overflow: hidden; } .con { background-color: hotpink; /*左邊的沒有背景色,右邊的加了背景色*/ background-image: radial-gradient(10px at 4px 4px, rgba(0, 0, 0, 0), rgba(2, 2, 2, 1)); width: 20px; height: 20px; border-radius: 50%; position: absolute; left: 30px; bottom: 30px; z-index: 2; } .blc1 { box-shadow: 10px 10px 7px #000; border-radius: 30%; width: 40px; height: 40px; background-color: midnightblue; position: absolute; left: 20px; bottom: 20px; } .tit { text-align: center; }

js

function randomInt(min, max) { //產生[min,max]范圍內的整數 return Math.round(Math.random() * (max - min)) + min; } function randomColor() { //產生隨機的顏色 var map = [1, 2, 3, 4, 5, 6, 7, 8, 9, ’a’, ’b’, ’c’, ’d’, ’e’, ’f’]; var str = ’#’; for (var i = 0; i < 6; i++) { var index = randomInt(0, 15); str += map[index]; } return str; } var wrap = document.querySelector(’.wrap’); var con = document.querySelector(’.con’); var oldtime = 0; //記錄鼠標按下的時間 var timer2 = null; //小球平拋運動定時器 var timer3 = null; //鼠標按下變形定時器 var num = 0; //游戲成績 var mouseD = false; //記錄鼠標是否按下 var mouseUp = true; //記錄鼠標是否松開 var h1 = document.querySelector(’h1’); var h2 = document.querySelector(’h2’); var max = localStorage.getItem(’max’); var div = document.createElement(’div’); //創建下一個平臺 h2.innerText = ’歷史最高:’ + localStorage.getItem(’max’); //從瀏覽器數據庫獲取最高分 div.style.left = 35 + randomInt(30, 60) + ’px’; //初始化平臺距離左邊的值 var div_sex = randomInt(30, 70); //初始化平臺大小,范圍 div.style.bottom = 40 - div_sex / 2 + ’px’; //平臺距離底部為小球底部減去平臺 div.style.height = div_sex + ’px’; div.style.width = div_sex + ’px’; div.className = ’blc1’; //添加初始化樣式 div.style.backgroundColor = randomColor(); //隨機顏色 wrap.appendChild(div); //存入平臺 document.onmousedown = function () { //監聽頁面點擊事件 if (!mouseD) { //如果鼠標按下沒有抬起 var blc = document.querySelectorAll(’.blc1’); //獲取所有平臺 oldtime = Date.now(); //記錄鼠標按下的時間 var target = blc[blc.length - 2]; //小球所在的平臺 var down_c = 10; //平臺最大下沉距離 var left = target.offsetLeft; //記錄鼠標按下后下沉效果之前平臺的left值 var bottom = 40 - target.offsetHeight / 2; //記錄鼠標按下后下沉效果之前平臺的bottom值 var con_l = con.offsetLeft; //記錄鼠標按下后下沉效果之前小球的left值 var con_b = 30; //記錄鼠標按下后下沉效果之前小球的bottom值 timer3 = setInterval(() => { //下沉效果定時器 down_c -= 0.03; //每一次變化0.03px if (down_c <= 0) { //最小值為0 down_c = 0.03; } target.style.boxShadow = down_c + ’px ’ + down_c + ’px ’ + down_c + ’px #000’; //邊框陰影向里縮,實現3D效果 target.style.left = left + 10 - down_c + ’px’; target.style.bottom = bottom + -10 + down_c + ’px’; con.style.left = con_l + 10 - down_c + ’px’; con.style.bottom = con_b - 10 + down_c + ’px’; //小球和平臺一起向右下角移動,配合陰影達到3D效果 }, 1); mouseD = true; //鼠標已經按下 mouseUp = false; //鼠標即將松開 } } document.onmouseup = function () { if (!mouseUp) { //如果沒有觸發mousedown事件不會執行以下代碼 mouseUp = true; //鎖定事件,小球運動結束前不能執行以下代碼 clearInterval(timer3); //清除下沉動畫 var timer4 = null; //上升動畫 var blc = document.querySelectorAll(’.blc1’); //獲取所有平臺 var target = blc[blc.length - 2]; //同下沉動畫 var left = target.offsetLeft; var down_time = 0; var down_c = 0; var click_time = Date.now() - oldtime; //鼠標按下的時間 var bottom = 40 - target.offsetHeight / 2 - (click_time * 0.03 > 10 ? 10 : click_time * 0.03); //原來的bottom-下沉的距離,最大為10 timer4 = setInterval(() => { //恢復原來的狀態 down_time++; if (down_time > click_time) { clearInterval(timer4); } down_c += 0.03; if (down_c >= 10) { down_c = 10; } target.style.boxShadow = down_c + ’px ’ + down_c + ’px ’ + down_c + ’px #000’; target.style.left = left - down_c + ’px’; target.style.bottom = bottom + down_c + ’px’; }, 1); var clicktime = (Date.now() - oldtime) * 1.5; //小球運動時間為鼠標按下的1.5倍,減少蓄力時間 var time2 = 0; //小球跳一跳計時器 var y = 30; //小球初始bottom值 var x = con.offsetLeft; //小球初始left值 clearTimeout(tout); //清除延時器 timer2 = setInterval(() => { //小球彈跳計時器 time2 += 20; y = 30 + clicktime / 50 * Math.sin(time2 * Math.PI / clicktime); //將總的時間分成180份通過sin(0,180)從0到0的特性完成一個圓滑的拋物線 con.style.left = x + time2 / 20 + ’px’; con.style.bottom = y + ’px’; }, 20); var tout = setTimeout(function () { //控制小球運動的時間與鼠標按下的時間*1.5相等,控制小球運動的時間 clearInterval(timer2); //結束小球運動 x = con.offsetLeft; //獲取運動結束后小球的left值 var blc = document.querySelectorAll(’.blc1’); //獲取所有的平臺 if (con.offsetLeft >= wrap.lastElementChild.offsetLeft && con.offsetLeft <= wrap .lastElementChild.offsetLeft + wrap.lastElementChild.offsetHeight - 10 ) { //判斷小球是否位于平臺里面 num += 10; //每跳一次加10分 h1.innerText = ’分數:’ + num; //動態展示分數 //生成下一個平臺 var div_sex2 = randomInt(40, 60); var newdiv = document.createElement(’div’); newdiv.style.bottom = 40 - div_sex2 / 2 + ’px’; newdiv.style.height = div_sex2 + ’px’; newdiv.style.width = div_sex2 + ’px’; newdiv.style.left = x + randomInt(80, 120) + ’px’; newdiv.style.backgroundColor = randomColor(); newdiv.className = ’blc1’; wrap.appendChild(newdiv); } else { alert(’游戲結束,分數:’ + num); max = max > num ? max : num; localStorage.setItem(’max’, max) //更新最高分 location.reload(); //刷新當前頁面 } wrap.scrollLeft = wrap.scrollWidth; //控制滾動條位于最右邊 mouseD = false; //完成一次事件,重新開啟 mouseUp = true; // }, clicktime) } }

更多有趣的經典小游戲實現專題,分享給大家:

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 土壤墒情监测站_土壤墒情监测仪_土壤墒情监测系统_管式土壤墒情站-山东风途物联网 | 浙江上沪阀门有限公司| 建筑资质代办-建筑企业资质代办机构-建筑资质代办公司 | 无线对讲-无线对讲系统解决方案-重庆畅博通信 | 半容积式换热器_北京浮动盘管换热器厂家|北京亿丰上达 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | 啤酒设备-小型啤酒设备-啤酒厂设备-济南中酿机械设备有限公司 | 全自动包衣机-无菌分装隔离器-浙江迦南科技股份有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 中矗模型-深圳中矗模型设计有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 环球电气之家-中国专业电气电子产品行业服务网站! | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 合肥汽车充电桩_安徽充电桩_电动交流充电桩厂家_安徽科帝新能源科技有限公司 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | LCD3D打印机|教育|桌面|光固化|FDM3D打印机|3D打印设备-广州造维科技有限公司 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 湖南自考_湖南自学考试| 德国UST优斯特氢气检漏仪-德国舒赐乙烷检测仪-北京泽钏 | 真石漆,山东真石漆,真石漆厂家,真石漆价格-山东新佳涂料有限公司 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 乙炔气体报警装置|固定式氯化氢检测仪|河南驰诚电气百科 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 顶空进样器-吹扫捕集仪-热脱附仪-二次热解吸仪-北京华盛谱信仪器 |