基于javascript实现按圆形排列DIV元素(二)


Posted in Javascript onDecember 02, 2016

一、原理分析

1.1怎么才能让DIV元素动起来?

动起来的实质,就是改变DIV的位置,也就是改变其left和top值;

  2.2怎么上DIV元素动起来的时候,是在规定的圆周上面?

通过上一次的分析,让DIV按圆形排队,我们知道了,如要让DIV定位在圆周上面,主要是根据角度(弧度)来实现的。

看下图:

基于javascript实现按圆形排列DIV元素(二)

上图中,我们B元素和C元素的定位是如何实现的?根据上一次讲的公式,如下:

(index:元素的索引值,radius半径,dotLeft:圆心的横坐标,dotTop:圆心的纵坐标)

B的left = Math.sin((ahd*Bindex))*radius+dotLeft
B的top = Math.cos((ahd*Bindex))*radius+dotTop
C的left = Math.sin((ahd*Cindex))*radius+dotLeft
C的top = Math.cos((ahd*Cindex))*radius+dotTop

从公式中可以看出,都一样,只是B和C的index,即索引值不一样,从而让角度(弧度)数不一样,结果就是正弦和余弦的值不一样,所以定位也就不一样了,但结果都是在这个圆周上变化。不会跑离这个圆周;

如果我现在想让B元素,定位到C元素的位置,该怎么做呢?

就是让B元素的角度(弧度)和C元素的一样,然后,套用上面的公式,就可以了。

B元素的现在的用的圆心角,是AOB,C元素用的圆心角,是AOC;  B元素和C元素之间相差了上图中BOC这个角度(弧度)值,也就是两个蓝色线条之间的角度(弧度);

得出结论:改变角度(弧度)就可以让元素在圆周上改变位置;

二、实例分析

根据上面的分析,我们已经知道如何在圆周上,改变DIV的位了;现在我们要做的就是怎么去改变才能让元素看起来是在运动?

是“速度”;有运动就会有速度

速度就是在规定时间内移动的距离:速度 = 距离/时间

速度太快就是“瞬间移动”让B移动到C;

速度慢,就可以看到B一点点向C的位置移动;

时间:在Javascript里的时间:就是用的setInterval(....,时间) 

例如:setInterval(移动,1000)  我们规定间隔1000毫秒,让元素做移动。

在本例中的移动:就是改变DVI的left和TOP值,而要改变这个值,需要用到上面的圆周上移动的公式;

速度:设一个速度 speed = 5;

这里的5,就是角度,即让圆心角,每1000毫秒,变化5度。

speed =  speed*Math.PI/180;将这个变化的角度转换成弧度,因为Math.sin只接受弧度单位的参数;

得出:

function 移动(){
speed ++

left = Math.sin((ahd*Bindex+speed ))*radius+dotLeft;

Math.cos((ahd*Bindex+speed))*radius+dotTop
}

三、实现代码:

$(function(){
 //中心点横坐标
 var dotLeft = ($(".container").width()-$(".dot").width())/2;
 //中心点纵坐标
 var dotTop = ($(".container").height()-$(".dot").height())/2;
 //起始角度
 var stard = 0;
 //半径
 var radius = 200;
 //每一个BOX对应的角度;
 var avd = 360/$(".box").length;
 //每一个BOX对应的弧度;
 var ahd = avd*Math.PI/180;
 //运动的速度
 var speed = 2;
 //设置圆的中心点的位置
 $(".dot").css({"left":dotLeft,"top":dotTop});
 //设置DIV圆形排列
 $(".box").each(function(index, element){
 $(this).css({"left":Math.sin((ahd*index))*radius+dotLeft,"top":Math.cos((ahd*index))*radius+dotTop});
 });
 //运动函数
 var fun_animat = function(){ 
 speed = speed<360?speed:2; 
 //运运的速度
 speed+=2;
 //运动距离,即运动的弧度数;
 var ainhd = speed*Math.PI/180; 
 //按速度来定位DIV元素
 $(".box").each(function(index, element){
 $(this).css({"left":Math.sin((ahd*index+ainhd))*radius+dotLeft,"top":Math.cos((ahd*index+ainhd))*radius+dotTop});
 });
 }
 //定时调用运动函数
 var setAnimate = setInterval(fun_animat,100);
 })

    其实也可以反过来思考,即每1000毫秒,我们获得圆周上的一个坐标点,将这个点的left和TOP值,赋给,需要改变位置,即运动的DIV元素!~~

以上就是本文的全部内容,希望对大家有所帮助,有兴趣的朋友可以参考文章《基于javascript实现按圆形排列DIV元素(一)》和《基于javascript实现按圆形排列DIV元素(三)》,谢谢对三水点靠木的支持!

Javascript 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
Sep 22 Javascript
JavaScript获取table中某一列的值的方法
May 06 Javascript
详解Node.Js如何处理post数据
Sep 19 Javascript
node.js通过axios实现网络请求的方法
Mar 05 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
element中的$confirm的使用
Apr 26 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 Javascript
在vue中封装方法以及多处引用该方法详解
Aug 14 Javascript
JavaScript canvas实现雨滴特效
Jan 10 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
Dec 02 #Javascript
Bootstrap Modal对话框如何在关闭时触发事件
Dec 02 #Javascript
基于javascript实现按圆形排列DIV元素(一)
Dec 02 #Javascript
关于Function中的bind()示例详解
Dec 02 #Javascript
bootstrap模态框消失问题的解决方法
Dec 02 #Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 #Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 #Javascript
You might like
PHP简单获取视频预览图的方法
2015/03/12 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
2018/06/20 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
微信上传视频文件提示(推荐)
2018/11/22 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
浅谈Python中的继承
2020/06/19 Python
Python logging模块handlers用法详解
2020/08/14 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
说明书格式及范文
2014/05/07 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server