原生js弹力球

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
height: 1200px;
}
</style>
</head>
<body>
</body> </html>
<script>
// 面向对象的思想:
//1、有哪些类:就只有一个弹力球类。
//2、步骤
// 定义类(弹力球类):构造函数
function Ball( size, left1, top1, color, step, directionLeft, directionTop, timeSpace) { // 属性:(把面向过程中的全局变量变成属性)
this.dom = null;
//球球的大小
this.size = size;
// 位置
this.left1 = left1;
this.top1 = top1;
//颜色
this.color = color;
// 步长
this.step = step;
this.timeSpace = timeSpace;
// 方向
this.directionLeft = directionLeft;
this.directionTop = directionTop; // 创建dom
this.createDom = function(){
this.dom = document.createElement("div");
this.dom.style.cssText = `
position: absolute;
left: ${this.left1}px;
top: ${this.top1}px;
width: ${this.size}px;
height: ${this.size}px;
border-radius: 50%;
background-color:${this.color};
`;
document.body.appendChild(this.dom);
} // 球球开始谈
this.go = function () {
setInterval(() => {
this.left1 = this.left1 + this.directionLeft * this.step;
this.top1 = this.top1 + this.directionTop * this.step; // 边界判断
// 1)、纵向
let clientHeigth = document.documentElement.clientHeight || document.body.clientHeight;
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; if (this.top1 + this.size > clientHeigth + scrollTop) {
// 下边界
this.top1 = clientHeigth + scrollTop - this.size;
this.directionTop = -1;
} else if (this.top1 < scrollTop) {
//上边界
this.top1 = scrollTop;
this.directionTop = 1;
}
//2)、横向
let clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
let scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
if (this.left1 + this.size > clientWidth + scrollLeft) {
// 右边界
this.left1 = clientWidth + scrollLeft - this.size;
this.directionLeft = -1;
} else if (this.left1 < scrollLeft) {
//左边界
this.left1 = scrollLeft;
this.directionLeft = 1;
} this.dom.style.left = this.left1 + "px";
this.dom.style.top = this.top1 + "px";
}, this.timeSpace);
} this.createDom();
this.go();
} window.onload = function () {
for(var i=0;i<200;i++){
// 1、随机大小(10-100)
let size = parseInt(Math.random()*91)+10;
// 2、随机位置;(横向:10-1000,纵向:10-600)
let left1 = parseInt(Math.random()*991)+10;
let top1 = parseInt(Math.random()*591)+10;
// 3、随机颜色
let color = getColor();
// 4、随机步长(1-10)
let step = parseInt(Math.random()*11)+1;
// 5、随机方向
let directionLeft = parseInt(Math.random()*2)==0?-1:1; //0和1
let directionTop = parseInt(Math.random()*2)==0?-1:1; //0和1
// 6、随机时间间隔(5-100)
let timeSpace = parseInt(Math.random()*96)+5;
let b1 = new Ball( size, left1, top1, color, step, directionLeft, directionTop, timeSpace);
}
} function getColor(){
var str = "#";
for(var i=0;i<6;i++){
str += parseInt(Math.random()*16).toString(16);
}
return str;
} </script>
原生js弹力球的更多相关文章
- js课程 6-15 js简单弹力球如何实现
js课程 6-15 js简单弹力球如何实现 一.总结 一句话总结:a.通过document的documentElement属性获取可是区域的高: b.通过增值变为负的实现到底部后反弹 1.docume ...
- js版弹力球实例
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>弹 ...
- JS实现弹性势能效果(弹力球效果[实现插件封装])
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
- 常用原生JS方法总结(兼容性写法)
经常会用到原生JS来写前端...但是原生JS的一些方法在适应各个浏览器的时候写法有的也不怎么一样的... 今天下班有点累... 就来总结一下简单的东西吧…… 备注:一下的方法都是包裹在一个EventU ...
- 原生JS实现"旋转木马"效果的图片轮播插件
一.写在最前面 最近都忙一些杂七杂八的事情,复习软考.研读经典...好像都好久没写过博客了... 我自己写过三个图片轮播,一个是简单的原生JS实现的,没有什么动画效果的,一个是结合JQuery实现的, ...
- 再谈React.js实现原生js拖拽效果
前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目 ...
- React.js实现原生js拖拽效果及思考
一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖 ...
- 原生JS实现全屏切换以及导航栏滑动隐藏及显示——重构前
思路分析: 向后滚动鼠标滚轮,页面向下全屏切换:向前滚动滚轮,页面向上全屏切换.切换过程为动画效果. 第一屏时,导航栏固定在页面顶部,切换到第二屏时,导航条向左滑动隐藏.切换回第一屏时,导航栏向右滑动 ...
随机推荐
- Python编程 从入门到实践-3列表下
笔记出处(学习UP主视频记录) https://www.bilibili.com/video/av35698354?p=5 3.2.3 从列表中删除元素-使用del语句删除元素 motorcycles ...
- 开篇词The Start以及[Vjudge][HDU2242]空调教室
开篇 这是我写的第一篇记录好题的博客,也是博客园上我发布的第一篇博客. 以后我的所有博客都将在洛谷和博客园上同时发布,同志们有兴趣的在哪里都可以看一看. [https://www.luogu.com. ...
- selenium基本对象之——数值型
python的数值类型,除了魔法方法以为,只有下面的这些方法: 整形的方法有:as_integer_ratio.bit_length.from_bytes.to_bytes.conjugate.ima ...
- 2020 还不会泡 Github 你就落伍了
前言 回想起两年前缸接触 GitHub 那会儿,就发现网上完全搜不到一篇关于 github 使用的文章,虽然自己倒腾几下慢慢的也就上手了,但毕竟花费了不少时间. 时间对每个人都是宝贵的,一直很好奇 G ...
- tempdb 日志文件增长的问题
前两天在一个客户那里发现tempdb log 文件增长很大,已经使用40GB了,而tempdb log 文件总的分配空间是70GB,并且日志空间貌似不能重用,他们使用sql 2012 打的sp4补丁, ...
- The Game Of Life – 数据结构与算法的敲门砖
The Game Of Life(生命游戏,又称为细胞自动机)几乎是所有数据结构与算法导论教程前言的一个很经典的程序了.这是一个零玩家游戏,发生在一个平面网格里.每个格子的细胞都有死亡和存活两种状态, ...
- webService-axis开发jar包
开发最小jar包集: activation-1.1.jar axiom-api-1.2.13.jar axiom-dom-1.2.13.jar axiom-impl-1.2.13.jar axis2- ...
- WordCount程序(Java)
Github项目地址:https://github.com/softwareCQT/web_camp/tree/master/wordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征 ...
- Natas20 Writeup(Session登录,注入参数)
Natas20: 读取源码,发现把sessionID存到了文件中,按键值对存在,以空格分隔,如果$_SESSION["admin"]==1,则成功登陆,得到flag.并且通过查询所 ...
- SpringMVC框架——转发与重定向
网上摘取一段大神总结的转发与重定向的区别,如下: 转发(服务端行为) 形式:request.getRequestDispatcher().forward(request,response) 转发在服务 ...