js实现交换运动效果的方法


Posted in Javascript onApril 10, 2015

本文实例讲述了js实现交换运动效果的方法。分享给大家供大家参考。具体分析如下:

实现后的效果,点击互相交换位置和距离左边和上角的信息。

要点一:

var now = s_pic_li[0];
for(var i=0; i<s_pic_li.length; i++){
s_pic_li[i].onclick = function(){
if(this == now) return false;
var w = now.offsetWidth;
var h = now.offsetHeight;
var l = now.offsetLeft;
var t = now.offsetTop;
var w1= this.offsetWidth;
var h1 = this.offsetHeight;
var l1 = this.offsetLeft;
var t1 = this.offsetTop;
startrun(now,{width:w1,height:h1,left:l1,top:t1});
startrun(this,{width:w,height:h,left:l,top:t});
now=this;
}
}

循环给每一块加点击事件,获取交换双方的信息,然后执行运动函数,相关信息做为参数。

最后,上代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
<!--
body,ul,li{margin:0; padding:0;
font:18px/1.5 arial; color:#333;}
#big_pic{width:500px; height:400px;
background:#ccc; text-align:center;
position:absolute;}
#s_pic li{float:left; width:100px;
height:80px; display:inline;
background:#06c; text-align:center;
position:absolute; top:310px;}
-->
</style>
<script>
<!--
window.onload = function(){
 var s_pic = document.getElementById("s_pic");
 var s_pic_li = s_pic.getElementsByTagName("li");
 var now = s_pic_li[0];
 for(var i=0; i<s_pic_li.length; i++){
  s_pic_li[i].onclick = function(){
   if(this == now) return false;
   var w = now.offsetWidth;
   var h = now.offsetHeight;
   var l = now.offsetLeft;
   var t = now.offsetTop;
   var w1= this.offsetWidth;
   var h1 = this.offsetHeight;
   var l1 = this.offsetLeft;
   var t1 = this.offsetTop;
   startrun(now,{width:w1,height:h1,left:l1,top:t1});
   startrun(this,{width:w,height:h,left:l,top:t});
   now=this;
  }
 }
}
function getstyle(obj,name){
 if(obj.currentStyle){
  return obj.currentStyle[name];
 }else{
  return getComputedStyle(obj,false)[name];
 }
}
function startrun(obj,json,fn){
 clearInterval(obj.timer);
 obj.timer = setInterval(function(){
  var isall = true; 
  for(var attr in json){
   var cur=0;
   if(attr == "opacity"){
    cur = Math.round(parseFloat(getstyle(obj,attr))*100);
   }else{
    cur = parseInt(getstyle(obj,attr));
   }
   var speed = (json[attr] - cur)/8
   speed = speed>0?Math.ceil(speed):Math.floor(speed);
   if(cur != json[attr]){
    isall = false;
   }
   if(attr == "opacity"){
    obj.style.filter = "alpha(opacity="+(cur+speed)+")";
    obj.style.opacity = (cur+speed)/100;
   }else{
    obj.style[attr] = cur+speed+"px";
   }
  }
  if(isall){
   clearInterval(obj.timer);
   if(fn){
    fn();
   }
  }
 },30);
}
//-->
</script>
</head>
<body>
<ul id="s_pic">
 <li style="left:0; top:0; width:400px; height:300px">0</div>
 <li style="left:0;">1</li>
 <li style="left:110px;">2</li>
 <li style="left:220px;">3</li>
 <li style="left:330px;">4</li>
</ul>
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
Mar 13 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
May 18 Javascript
全面理解闭包机制
Jul 11 Javascript
关于微信中a链接无法跳转问题
Aug 02 Javascript
javascript表单正则应用
Feb 04 Javascript
在node.js中怎么屏蔽掉favicon.ico的请求
Mar 01 Javascript
js实现自定义进度条效果
Mar 15 Javascript
JS实现列表页面隔行变色效果
Mar 25 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
vue实现消息的无缝滚动效果的示例代码
Dec 05 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 #Javascript
javascript实现简单的鼠标拖动效果实例
Apr 10 #Javascript
js简单实现点击左右运动的方法
Apr 10 #Javascript
js实现透明度渐变效果的方法
Apr 10 #Javascript
js实现同一页面多个运动效果的方法
Apr 10 #Javascript
js实现同一个页面多个渐变效果的方法
Apr 10 #Javascript
js实现缓冲运动效果的方法
Apr 10 #Javascript
You might like
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
js实现文字截断功能
2016/09/14 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
python元组操作实例解析
2014/09/23 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
军训自我鉴定200字
2014/02/13 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
python处理json数据文件
2022/04/11 Python