<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>轨迹</title> <script>
var speed = [1, 1]; //初始位移值:[水平,垂直]
var speedMax = 5; //最大位移值
var length = 1; //位移系数
var boxSpace = [50, 50, 500, 300]; //画布参数:[起始点水平位置,起始点垂直位置,宽度,高度]
var item = [200, 150, 50, 50]; //控件参数:[起始点水平位置,起始点垂直位置,宽度,高度]
var millisec = 5; //执行周期间隔,单位:毫秒
var playFlag = true; //初始状态:播放/停止 //初始化
function init(){
//初始化控制栏
var styleBar = $("bar").style;
styleBar.left = boxSpace[0] + "px";
styleBar.width = boxSpace[2] + "px";
//初始化画布
var styleBox = $("box").style;
styleBox.left = boxSpace[0] + "px";
styleBox.top = boxSpace[1] + "px";
styleBox.width = boxSpace[2] + "px";
styleBox.height = boxSpace[3] + "px";
//初始化控件
var styleClk = $("clk").style;
styleClk.left = item[0] + "px";
styleClk.top = item[1] + "px";
styleClk.width = item[2] + "px";
styleClk.height = item[3] + "px";
//注册控件鼠标事件
$("clk").onmouseover = stop;
$("clk").onmouseout = play;
//注册控制栏事件
$("btnPlay").onclick = play;
$("btnStop").onclick = stop;
//默认播放或停止
if(playFlag) play();
}
//播放
function play(){
playFlag = true;
autoMove();
}
//停止
function stop(){
playFlag = false;
}
//返回Dom对象
function $(elmId){
return document.getElementById(elmId);
}
//生成随机数
function randomNum(min, max){
var Range = max - min;
var Rand = Math.random();
return(min + Math.round(Rand * Range));
}
//动画逻辑
function autoMove(){
//生成本次位移量
var xBool = randomNum(0, 100) > 50 ? 1 : -1; //水平位移趋势,1:向右,-1:向左
var yBool = randomNum(0, 100) > 50 ? 1 : -1; //垂直位移趋势,1:向下,-1:向上
speed[0] += xBool * length; //在原来水平位移量的基础上,加入趋势影响
speed[1] += yBool * length; //在原来垂直位移量的基础上,加入趋势影响 //处理本次位移量是否已经超过最大值
if(speed[0] < -1 * speedMax) speed[0] = -1 * speedMax; //水平位移量不允许超过最大值
if(speed[0] > speedMax) speed[0] = speedMax; //水平位移量不允许超过最大值
if(speed[1] < -1 * speedMax) speed[1] = -1 * speedMax; //垂直位移量不允许超过最大值
if(speed[1] > speedMax) speed[1] = speedMax; //垂直位移量不允许超过最大值 //允许控件活动的画布坐标范围
var leftLimit = boxSpace[0];
var topLimit = boxSpace[1];
var rightLimit = boxSpace[0] + boxSpace[2] - item[2];
var bottomLimit = boxSpace[1] + boxSpace[3] - item[3]; //当前控件坐标位置
var xNow = parseInt($("clk").style.left);
var yNow = parseInt($("clk").style.top); //对控件活动超出范围时进行反弹处理
if((xNow + speed[0]) < leftLimit || (xNow + speed[0]) > rightLimit) speed[0] *= -1;
if((yNow + speed[1]) < topLimit || (yNow + speed[1]) > bottomLimit) speed[1] *= -1; //重新设定控件坐标,形成动画
$("clk").style.left = xNow + speed[0] + "px";
$("clk").style.top = yNow + speed[1] + "px"; //调用下一次动画逻辑
if(playFlag) setTimeout(autoMove, millisec);
}
window.onload = init;
</script>
<style>
#bar { position: absolute; background: #F5F1C2; border: 1px solid #996600; z-index: 30; text-align: center; line-height:26px; height:30px; top: 20px }
#bar a { color: #FFF; font-size: 10pt; margin: 2px 2px; display: block; width: 80px; height: 26px; background: #7C7514; float: left; text-decoration:none}
#bar a:hover { background:#C00; }
#box { position: absolute; background: #FFFFCC; border: 1px solid #996600; z-index: 10 }
#clk { position: absolute; cursor:pointer; background: #000000; color: #FFF; text-align: center; line-height:50px; z-index: 20 }
</style>
</head>
<body>
<div id="bar"><a href="#" id="btnPlay">播放</a><a href="#" id="btnStop">停止</a></div>
<div id="box"></div>
<div id="clk">点这</div>
</body>
</html>

没有任何美感的运行效果:

闲来无事,用javascript写了一个简单的轨迹动画的更多相关文章

  1. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  2. 写了一个简单的CGI Server

    之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...

  3. JavaScript写的一个带AI的井字棋

    最近有一门课结束了,需要做一个井字棋的游戏,我用JavaScript写了一个.首先界面应该问题不大,用html稍微写一下就可以.主要是人机对弈时的ai算法,如何使电脑方聪明起来,是值得思考一下的.开始 ...

  4. 自己写的一个简单PHP采集器

    自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...

  5. 写了一个简单可用的IOC

    根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录    只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...

  6. 写了一个简单的 Mybatis

    写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...

  7. 用25行JavaScript语句实现一个简单的编译器

    原文:https://www.iteye.com/news/32680 译者注:即使对于专业程序员来说,构造一个编译器也是颇具挑战性的任务,本文将会引导你抽丝剥茧,一探究竟! 我已经写了几篇与编程语言 ...

  8. 利用HttpClient写的一个简单页面获取

    之前就听说过利用网络爬虫来获取页面,感觉还挺有意思的,要是能进行一下偏好搜索岂不是可以满足一下窥探欲. 后来从一本书上看到用HttpClient来爬取页面,虽然也有源码,但是也没说用的HttpClie ...

  9. 今天写了一个简单的新浪新闻RSS操作类库

    今天,有位群友问我如何获新浪新闻列表相关问题,我想,用正则表达式网页中取显然既复杂又不一定准确,现在许多大型网站都有RSS集合,所以我就跟他说用RSS应该好办一些. 一年前我写过一个RSS阅读器,不过 ...

随机推荐

  1. step2: 爬取廖雪峰博客

    #https://zhuanlan.zhihu.com/p/26342933 #https://zhuanlan.zhihu.com/p/26833760 scrapy startproject li ...

  2. Golang教程:Map

    什么是 map? Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:mak ...

  3. 常用工具说明--Git和GitHub简明教程

    一.Git的主要功能:版本控制 版本:想想你平时用的软件,在软件升级之后,你用的就是新版本的软件.你应该见过这样的版本号:v2.0 或者 1511(表示发布时为15年11月),如下图:那么如果你修改并 ...

  4. [转]js 回车转成TAB(利用tabindex)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. VS快捷键设置无效

    使用Resharper 后发现有些快捷键冲突,但是在工具-选项-键盘 设置后不管用,后来发现有一个移除功能,即移走原来的快捷键; 先选择下拉框1中自己用不到的快捷键,然后移除掉; 备注: 注意观察 快 ...

  6. 出现多个sessid

    这种情况我也出现了,很郁闷.这是每次请求页面,都生成一个存PHPSESSID的cookie,cookie路径的问题,可以发现你这几个PHPSESSID的Path都不一样.我修改Thinkphp的配置文 ...

  7. .NET 中使用阿里云短信的 API 接口

    小弟初来乍到,这也是我的第一篇文章,写的不好的地方还望指正.谢谢各位! 引言 短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信 ...

  8. ssm架构添加maven、shiro、lucene、ueditor、druid支持

    1.pom.xml文件配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...

  9. Angular4 step by step.3

    1.Routes 路由模块 import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angul ...

  10. HttpClient 入门教程学习

    HttpClient简介 HttpClient是基于HttpCore的HTTP/1.1兼容的HTTP代理实现. 它还为客户端认证,HTTP状态管理和HTTP连接管理提供可重用组件. HttpCompo ...