基于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 相关文章推荐
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
Aug 13 Javascript
javascript确认框的三种使用方法
Dec 17 Javascript
jquery ajax 局部刷新小案例
Feb 08 Javascript
你可能不知道的JavaScript的new Function()方法
Apr 17 Javascript
jquery调取json数据实现省市级联的方法
Jan 29 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
JavaScript中关于for循环删除数组元素内容时出现的问题
Nov 21 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
详解js跨域请求的两种方式,支持post请求
May 05 Javascript
微信小程序实现的一键连接wifi功能示例
Apr 24 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
web方式ftp
2006/10/09 PHP
Phpbean路由转发的php代码
2008/01/10 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
Yii中实现处理前后台登录的新方法
2015/12/28 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
JS获取CSS样式(style/getComputedStyle/currentStyle)
2016/01/19 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
2020/06/22 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
老龄工作先进事迹
2014/08/15 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
PyTorch device与cuda.device用法
2022/04/03 Python