求一个javascript动画函数,用来交换两个元素位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个javascript动画函数,用来交换两个元素位置相关的知识,希望对你有一定的参考价值。

我需要一个JS函数来实现一个动画效果,作用是交换两个div元素的位置,具体效果类似于缓缓飘过或者想弹簧弹到目的位置的感觉,就是要炫一点的动画效果,不要和我推荐库什么的,我要的是函数。分数不多,不成敬意

<div style="width:200px;height:200px;background:Red;position:absolute;left:10px;top:10px;" id="div1">div1</div>
<br><br>
<div style="width:200px;height:200px;background:green;position:absolute;left:500px;top:300px;" id="div2">div2</div>
<br><BR><br><BR><br><BR><br><BR><br><BR><br><BR><br><BR><br><BR><br><BR><br><BR><br><BR>
<input name="tt" type="button" id="tt" value="交换位置" onclick="jiao()">
<script>
function getPos(obj)
var top=0,left=0;
if(obj)
while(obj.offsetParent)
top += obj.offsetTop;
left += obj.offsetLeft;
obj = obj.offsetParent;


return[top,left];

var flag;
function jiao()
clearTimeout(flag);
var obj1=document.getElementById("div1");
var obj2=document.getElementById("div2");
var a=getPos(obj1);
var b=getPos(obj2);
var t=5;
var l=9;
var Tflag=false;
var Lflag=false;
function move()
if(a[0]<=b[0])
var c=getPos(obj1)[0]-b[0]<t?t:getPos(obj1)[0]-b[0];
var d=getPos(obj2)[0]-a[0]>t?t:getPos(obj2)[0]-a[0];
if(getPos(obj1)[0]<b[0])obj1.style.top=getPos(obj1)[0]+c;
if(getPos(obj2)[0]>a[0])obj2.style.top=getPos(obj2)[0]-d;
else
var c=getPos(obj1)[0]-b[0]>t?t:getPos(obj1)[0]-b[0];
var d=getPos(obj2)[0]-a[0]<t?t:getPos(obj2)[0]-a[0];
if(getPos(obj1)[0]>b[0])obj1.style.top=getPos(obj1)[0]-c;
if(getPos(obj2)[0]<a[0])obj2.style.top=getPos(obj2)[0]+d;

if(getPos(obj1)[0]==b[0]&&getPos(obj2)[0]==a[0])
Tflag=true;

if(a[1]<=b[1])
var c=getPos(obj1)[1]-b[1]<l?l:getPos(obj1)[1]-b[1];
var d=getPos(obj2)[1]-a[1]>l?l:getPos(obj2)[1]-a[1];
if(getPos(obj1)[1]<b[1])obj1.style.left=getPos(obj1)[1]+c;
if(getPos(obj2)[1]>a[1])obj2.style.left=getPos(obj2)[1]-d;
else
var c=getPos(obj1)[1]-b[1]>l?l:getPos(obj1)[1]-b[1];
var d=getPos(obj2)[1]-a[1]<l?l:getPos(obj2)[1]-a[1];
if(getPos(obj1)[1]>b[1])obj1.style.left=getPos(obj1)[1]-c;
if(getPos(obj2)[1]<a[1])obj2.style.left=getPos(obj2)[1]+d;

if(getPos(obj1)[1]==b[1]&&getPos(obj2)[1]==a[1])
Lflag=true;

if(!(Tflag&&Lflag))
flag=setTimeout(move,30);


move();

</script>

花了一两个小时给你编写了一个,自己可以调整里面的参数,由于时间问题,没有仔细的测试!
参考技术A html code can like this:
<div id="div1" style="left:0px;"></div>
<div id="div2" style="left:100px;"></div>
$(function()
$("#div1").animate(left:100,1000);
$("#div21").animate(left:0,1000);
);

Win10系列:JavaScript动画3

"交叉进出"动画也是Windows动画库中的动画效果。"交叉进出"动画的动画效果是在应用程序界面上隐藏一个元素并同时在相同位置显示另一个元素的时候,被隐藏的元素渐消失在应用程序界面上,而将要显示的元素渐显示在应用程序界面上。

创建"交叉进出"动画可以使用WinJS.UI.Animation.crossFade函数,该函数有两个Object类型的参数,第一个参数是将要显示的元素对象或元素对象数组,第二个参数是将要消失元素的元素对象或元素对象数组,下面以一个应用程序为例,来演示如何使用HTML5和JavaScript实现"交叉进出"动画。在这个应用程序运行后,初始界面显示一张花朵图片,单击应用程序界面上的"显示"按钮后,花朵图片逐渐淡出界面,在花朵图片相同的位置一张小河图片逐渐显示。

新建一个JavaScript的Windows应用商店的空白应用程序项目,将其命名为CrossFadeAnimation。接着添加项目中用到的图片文件,在项目默认新建的文件夹images上单击右键,选择"添加"à"现有项",在本地文件夹中选择一张花朵图片和一张小河图片并添加到项目中。

完成添加图片的操作后,接下来打开default.html文件,在default.html文件的body元素中添加两个img元素和一个"显示"按钮,设置第一个img元素的id属性值为"flowerImage",src属性值为花朵图片的地址,用于显示一张花朵图片;设置第二个img元素的id属性值为"waterImage",src属性为小河图片的地址,用于显示一张小河图片;为"显示"按钮的id属性赋值"runAnimationButton",用于控制两个图片的显示。相应的HTML代码片段如下所示:

<body>

<img id="flowerImage" src="/images/.png" />

<img id="waterImage" src="/images/河水.png" />

<button id="runAnimationButton">显示</button>

</body>

为了控制应用程序界面的显示外观,在default.css文件中添加如下代码来控制default.html页面的布局。

/*设置body元素的边距*/

body {

margin-left:300px;

margin-top:200px;

}

/*设置id属性值分别为"flowerImage""waterImage"的元素的位置和边距*/

#flowerImage, #waterImage

{

position: absolute;

width: 150px;

height: 150px;

}

/*设置id属性值为"runAnimationButton"的元素的边距*/

#runAnimationButton {

margin-left:30px;

margin-top:160px;

}

完成前台界面的布局后,应用程序界面效果如图19-27所示。

图19-27 "交叉进出"动画初始界面

布局好前台界面后,接下来介绍如何实现"交叉进出"动画。打开default.js文件,在"args.setPromise(WinJS.UI.processAll());"语句后添加如下代码,为"显示"按钮注册click事件的处理函数runAnimationButton_Click,并设置初始状态下小河图片完全透明。

runAnimationButton.addEventListener("click", runAnimationButton_Click);

waterImage.style.opacity = "0";

在上面的代码中,调用id属性值为"runAnimationButton"的元素对象的addEventListener函数为相应元素注册click事件处理函数,函数名为runAnimationButton_Click。接着通过设置waterImage.style对象中的opacity属性值为0,把id属性值为"waterImage"的元素设置为完全透明。

下面在"app.onactivated = function (args) {......};"语句的后面添加代码,定义事件处理函数runAnimationButton_Click,实现两张图片转换时"交叉进出"的动画效果。

function runAnimationButton_Click() {

var incomingImage;

var outgoingImage;

//判断id属性值为flowerImage的元素的不透明度是否为0

if (flowerImage.style.opacity === "0") {

//将要显示的元素对象赋值给incomingImage变量

incomingImage = flowerImage;

//将要隐藏的元素对象赋值给outgoingImage变量

outgoingImage = waterImage;

} else {

incomingImage = waterImage;

outgoingImage = flowerImage;

}

//调用WinJS.UI.Animation.crossFade函数创建"交叉进出"动画

WinJS.UI.Animation.crossFade(incomingImage, outgoingImage);

}

在上面的代码中,首先定义了两个变量incomingImage和outgoingImage,分别用于保存将要显示的元素对象和将要隐藏的元素对象。接着判断id属性值为"flowerImage"的元素的不透明度是否为0,如果为0将该元素对象赋值给incomingImage变量,将id属性值为"waterImage"的元素对象赋值给outgoingImage变量;如果不为0,将id属性值为"waterImage"的元素对象赋值给incomingImage变量,将id属性值为"flowerImage"的元素对象赋值给outgoingImage变量。最后,调用WinJS.UI.Animation.crossFade函数以incomingImage和outgoingImage为参数创建"交叉进出"动画。

启动调试,应用程序的初始界面如图19-27所示,单击"显示"按钮,界面上的花朵图片逐渐淡出,小河图片逐渐显示,小河图片显示后的效果如图19-28所示。

图19-28 "交叉进出"动画显示后的界面

以上是关于求一个javascript动画函数,用来交换两个元素位置的主要内容,如果未能解决你的问题,请参考以下文章

编写一个javascript函数arraysum(arr),用来求一个数组中各元素之和

javascript-jquery对象的动画处理

unity3d 模型uv动画 key 播放问题 求指教!!!

任意一个序列,每次可交换序列中任意两个数,最少需要多少次交换可以使序列有序?

如何使用 ViewWillLayoutSubview 为 UIView 框架设置动画

Win10系列:JavaScript动画3