文章目录

  • 前言
  • 一、效果展示
  • 二、代码与思路
    • 1.代码
    • 2.思路
  • 后续展望

前言

作者是一个JavaScript新手,偶尔想到一些有趣的小案例分享


一、效果展示

这个小方块很像苍蝇,每当靠近就快速飞走……不依靠苍蝇拍的话很难捉住

二、代码与思路

1.代码

代码如下:

<!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>Document</title><style>* {margin: 0;padding: 0;}body {width: 100%;height: 100%;}.divv {position: absolute;width: 150px;height: 150px;background-color: white;}.w {width: 30px;height: 30px;background-color: lightseagreen;margin: 60px;}</style>
</head><body><div class="main"><div class="divv"><div class="w"></div></div></div><script>let n = -5;let div = document.querySelector('.divv');let leftl = 3;let leftpow = 0.5;let topl = 3;let toppow = 0.5;function animate(obj, leftl, leftpow, topl, toppow) {let n = -5;let t1 = 1;let t2 = 1;var timer = setInterval(function () {let left_move = obj.offsetLeft + leftl * Math.pow((28 - n * n), leftpow);let top_move = obj.offsetTop + topl * Math.pow((28 - n * n), toppow);//防止超出边界if (left_move < 0 || left_move > window.screen.width - 50) {t1 = -1;}if (top_move < 0 || top_move > window.screen.height - 200) {t2 = -1;}left_move = t1 * leftl * Math.pow((26 - n * n), leftpow);top_move = t2 * topl * Math.pow((26 - n * n), toppow);obj.style.left = obj.offsetLeft + left_move + 'px';obj.style.top = obj.offsetTop + top_move + 'px';n = n + 1;if (n > 5) {clearInterval('timer');}}, 20);}div.addEventListener('mouseover', function () {leftl = 1 + 1 * Math.random();leftpow = 0.5 + 0.5 * Math.random();topl = 1 + 1 * Math.random();toppow = 0.5 + 0.5 * Math.random();//倾向于往中间跑if (div.offsetLeft / window.screen.width < Math.random()) {leftl = Math.abs(leftl);}else {leftl = -1 * Math.abs(leftl);}if (div.offsetTop / window.screen.height < Math.random()) {topl = Math.abs(topl);}else {topl = -1 * Math.abs(topl);}animate(div, leftl, leftpow, topl, toppow);})</script>
</body></html>

2.思路

将小方块分为两个部分,一个是可探测区域,一个是自身。可探测区域如图,要远超过自身大小。,以此来提前与半获取你鼠标的位置。

但是不能让他跑出屏幕边界啊,因此加入了轮盘赌,让小方块越靠近边界,下一步往屏幕中心跑的概率就越大。以此保证了游戏体验

if (div.offsetLeft / window.screen.width < Math.random()) {leftl = Math.abs(leftl);}else {leftl = -1 * Math.abs(leftl);}if (div.offsetTop / window.screen.height < Math.random()) {topl = Math.abs(topl);}else {topl = -1 * Math.abs(topl);}

后续展望

后续可以引入多个方块,让他们进行“战争”,利用强化学习的思想,进一步提升可玩性。同时可用于群机器人的算法仿真展示。

[突发奇想的JS小案例] 1 捉苍蝇相关推荐

  1. [突发奇想的JS小案例] 2 重力模拟

    文章目录 前言 一.效果展示 二.代码与思路 1.代码 2.思路 后续展望 前言 作者是一个JavaScript新手,偶尔想到一些有趣的小案例分享 一.效果展示 可以利用鼠标拖动舞台中的方块,松开鼠标 ...

  2. JS小案例总结(JS基础案例)

    JS小案例总结 JS小案例总结 案例一:JS实现tab选项卡功能 案例二:JS实现盒子拖拽功能 案例三:JS实现导航条吸顶效果 案例四:JS实现图片懒加载结构 案例五:JS实现简易弹幕功能 案例六:J ...

  3. JS小案例--关于时间--限时购

    JS小案例–关于时间–限时购 界面显示和功能实现 功能实现 设置了一个特定的日期 和当前时间 相差 实现折合成 天 小时 分钟 秒 使用性 :像某宝的商品限时购 所以很实用 用到的知识点 为日期对象设 ...

  4. js小案例:实现选项卡功能

    js小案例:实现选项卡功能 html部分代码 <button>1</button><button>2</button><button>3&l ...

  5. JS小案例-文本切换效果

    下面是一个文本切换效果的小案例,希望可以可以帮助到有需要的小伙伴 <!DOCTYPE html> <html lang="en"><head>& ...

  6. node.js小案例_留言板

    一.前言 通过这个案例复习: 1.node.js中模板引擎的使用 2.node.js中的页面跳转和重定向 二.主要内容 1.案列演示: 2.案列源码:https://github.com/456123 ...

  7. 简单JS小案例:五星好评

    CSS内容可自行设计,本案例仅供参考,请自行拷贝代码,拷贝要留言哦! 注意: js文件路径及文件名需要自行更改!! Html部分: <!DOCTYPE html> <html lan ...

  8. js小案例-九宫格抽奖

    目录 一.案例介绍 二.效果展示 三.代码展示 四.源码下载地址 一.案例介绍 案例主要通过设置定时器setInterval和改变className值实现转动,设置延时器setTimeout清除定时器 ...

  9. js小案例-相册选择功能

    案例介绍 案例通过使用鼠标的悬停事件,改变img元素的src链接实现图片替换,改变img元素的className值实现选中样式的添加. 此功能多应用于电商网站的商品展示. 效果展示 代码展示 HTML ...

最新文章

  1. Silverlight:SSL教程
  2. 请写出sfr和sbit的语句格式_最新最全 Oracle ORA-01861: 文字与格式字符串不匹配
  3. 使用charles对vue项目进行map Local功能mock数据页面不正常显示
  4. Android adb logcat使用技巧
  5. 假设有python程序文件_《Python程序设计》题库
  6. mongodb查询文件服务器的数据,服务器端知识库mongodb基础篇
  7. idea设置Java版本
  8. centos安装udp,tcp的测试工具
  9. 一、Oracle创建账户、修改、删除账户及授权和撤销授权。
  10. 【读书笔记】-最优状态估计 Optimal State Estimation Kalman, H,, and Nonlinear Approaches 【Dan Simon】
  11. 2020年8月程序员工资统计,平均14401元,下跌势头止住了
  12. java用ssm框架开发的空气质量检测系统源码网站实战项目
  13. 能够正常加入域但无法实施域策略
  14. 多元相关性分析_数据分析的方法(三)
  15. idea启动项目提示端口占用怎么办
  16. 浏览器访问网址过程详解
  17. ie退出全屏快捷键_IE浏览器快捷键,IE浏览器全屏快捷键
  18. Wi-Fi Display
  19. display:inline-bock的注意
  20. Windows 10 (Multiple Editions), Version 1607

热门文章

  1. MySQL5.7开启 binlog
  2. leetcode 29 两数相除 C语言
  3. 如何导演才能拍出亲密无间的闺蜜照
  4. 【新番尝鲜】超越宇宙的少女——不明生物参见
  5. Python 列表切片操作
  6. Arduino NANO,UNO 驱动安装
  7. nuwa :线程分析,nuwa 如何产生,nuwa如何恢复线程?
  8. 网络安全中白盒测试是什么意思?与黑盒测试有何不同?
  9. 局域网时间服务器无法修改,局域网时间服务器设置方法
  10. 16.整理华为面经--1