今天用js做了个元素移动的效果,支持水平、垂直方向上的单次移动和来回移动,支持斜向运动(斜向运动时自带反弹效果 哈哈)。
假设这个元素是我们想要移动的:
<img id="moveE" src="/wp-content/uploads/2014/07/1_b.gif">
它可以是图片,也可以是其他元素。可以定义css样式,这个没关系。
js代码如下:
function move_on(element,far,to,cishu,time) {
var add=(to%2==1)?true:false;
var num=(to<3)?((element.style.marginLeft==="")?0:parseInt(element.style.marginLeft)):((element.style.marginTop==="")?0:parseInt(element.style.marginTop));
var max=(to%2==1)?(num+far):num;
var min=(to%2==1)?num:(num+far);
var time=setInterval(function () {
if(add){
num++;
(to<3)?(element.style.marginLeft=num+"px"):(element.style.marginTop=num+"px");
if(num>=max){
add=false;
cishu--;
if(cishu==0){clearInterval(time)}
}
}else{
num--;
(to<3)?(element.style.marginLeft=num+"px"):(element.style.marginTop=num+"px");
if(num<=min){
add=true;
cishu--;
if(cishu==0){clearInterval(time)}
}
}
},time);
}
(代码挺短的吧~三元操作符真是个好东西啊
参数解释:
要移动的元素、移动多少像素、移动类型、移动次数、定时器执行间隔时间(毫秒)
移动类型规定如下:
1 左右来回移动,起始点是从左向右
2 左右来回移动,起始点是从右向左
3 上下来回移动,起始点是从上向下
4 上下来回移动,起始点是从下向上
移动次数定义如下:
为0时为无限制来回移动,否则定义为多少则移动多少次。注意,一次单向运动算1次,一次来回运动算2次。
可能看的有点迷,没关系,接下来我一个个上例子。
这个是基础效果,元素在一个方向(水平或者垂直)上,在一定范围内来回运动。
调用代码如下:
window.onload=function () {
move_on(document.getElementById("moveE"),600,1,0,1);
}
调用代码要在元素后面执行,能保证这点的话就不需要加window.onload或document.ready。
来理解一下参数的含义:
移动的元素是moveE,移动的距离是600像素,移动方向是水平向右,移动次数不限制(所以会来回跑),定时器每隔1毫秒执行一次。
如果想改成垂直运动,就把第三个参数改了。如果只运动一次,就把第4个参数改成1。那样元素移动到指定距离之后就不动了。其他的参数很简单,没什么可说的。
这个例子让元素斜向运动并且限制在一定范围内。
怎么让元素斜向移动的呢?很简单,同时启动两个定时器,一个做水平方向的运动,一个做垂直方向的运动。
代码如下:
window.onload=function () {
var moveE=document.getElementById("moveE");
var _width=500-moveE.offsetWidth;
var _height=400-moveE.offsetHeight;
move_on(moveE,_width,1,0,1);
move_on(moveE,_height,3,0,1);
}
由于移动是往复进行的,所以自然就有了反弹效果。
这里由于要获取元素宽高信息,最好是加在window.onload或document.ready里执行。如果想改变移动范围,那就修改_width、_height里的数字为你想要的距离。
如果元素在页面左上角,那就不适合向左上方斜着运动,不然可能就跑出页面范围外了。所以如果你想让元素往左上方运动,就别把元素放到左上角。这个地方只是提醒一下。
如果想让元素在整个页面上来回移动反弹(文章最开始的demo),也很简单。相比上面的斜向运动,只是修改了宽高范围、修改了元素起始位置等属性。
代码如下:
window.onload=function () {
var moveE=document.getElementById("moveE");
moveE.style.position="fixed";
moveE.style.left=0;
moveE.style.top=0;
moveE.style.zIndex=999999;
moveE.style.margin=0;
var moveWidth=document.body.scrollWidth-moveE.offsetWidth;
var moveHeight=window.innerHeight-moveE.offsetHeight;
move_on(moveE,moveWidth,1,0,1);
move_on(moveE,moveHeight,3,0,1);
}
这里把元素改成从左上角向右下方向运动。如果你想改起始坐标、改运动方向,都是可以的。
最后再扩展一下。上面做斜向运动时,定时器都是1毫秒,所以运动路线是45度角的。可以修改成不容的时间间隔来控制路线的角度。
Google Chrome 51
Windows 7 x64 Edition
Sogou Explorer
Windows 7 x64 Edition 好有趣的样子
我只想要一个往右下角移动的js,求写与指教