javascript跑马灯悬停放大效果实现代码


Posted in Javascript onDecember 12, 2012

用过qq空间的朋友应该对这个很熟悉吧,效果蛮炫的,不过它们是用flash实现的,那么javascript可不可以呢,我琢磨了三天,终于弄的差不多了,不过还是有些地方不完善,还望大家多多谅解,我会在以后将其完善的.

先说下思路:
首先动态创建一个html结构

<div style="overflow-x:hidden;"> 
<table border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td><img src="1.jpg"><img src="2.jpg"><img src="3.jpg"><img src="4.jpg">.............</td> 
<td></td> 
</tr> 
</table> 
</div>

这个很关键,然后设置一个计时器来模拟img的移动,并且绑定外层div的onmouseenter和onmouseleave事件.最后将外层的div对象返回.

下面看代码

sx.activex.dynamicpic={ 
init:function(imga,border,margin,w,h,step,speed){ 
var demo=document.createElement("div"); 
var tbody=document.createElement("tbody"); 
var demo1=document.createElement("td"); 
var demo2=document.createElement("td"); 
var table=document.createElement("<table border=/"0/" cellspacing=/"0/" cellpadding=/"0/">"); 
var tr=document.createElement("tr"); 
demo.style.position="absolute"; 
demo.style.height=h+"px"; 
demo.style.width=w+"px"; 
demo.style.overflowX="hidden"; 
for(var i=0;i<imga.length;i++){ 
var img=document.createElement("img") 
img.src=imga[i]; 
img.style.height=h+"px"; 
img.style.width=parseInt(w/imga.length)+"px"; 
demo1.appendChild(img) 
} 
tr.appendChild(demo1); 
tr.appendChild(demo2); 
tbody.appendChild(tr); 
table.appendChild(tbody); 
demo.appendChild(table); 
var c=demo1.all; 
for(var i=0;i<c.length;i++){ 
c[i].style.marginLeft=margin+"px"; 
c[i].style.border=border; 
} 
demo2.innerHTML = demo1.innerHTML 
function Marquee(){ 
if(demo2.offsetWidth-demo.scrollLeft<=0){ 
//alert(demo.scrollLeft); 
demo.scrollLeft-=demo1.offsetWidth;} 
else{ 
demo.scrollLeft+=step; 
} 
} 
var MyMar = setInterval(Marquee,speed); 
demo.onmouseenter = function(){ 
clearInterval(MyMar); 
var t=document.elementFromPoint(window.event.clientX,window.event.clientY); 
if(t.tagName!="IMG") 
return; 
if(t.offsetHeight>demo.offsetHeight+10) 
return; 
//alert(t.src); 
var d=document.createElement("img"); 
d.style.height=t.offsetHeight+50+"px"; 
d.style.width=t.offsetWidth+50+"px"; 
d.style.position="absolute"; 
d.style.top="-25px"; 
if(t.parentNode==demo2){ 
d.style.left=t.offsetLeft+demo1.offsetWidth-20+"px"; 
//alert(1); 
//demo.scrollLeft-=demo1.offsetWidth; 
}else{ 
d.style.left=t.offsetLeft-25+"px";} 
//alert(d.style.left); 
//alert(window.event.clientX); 
//alert(t.offsetLeft-demo.scrollLeft+demo.offsetWidth-25); 
d.src=t.src; 
d.onmouseleave=function(){ 
d.parentNode.removeChild(d); 
MyMar = setInterval(Marquee,speed) 
} 
//alert(1); 
//demo.style.overflow="visible"; 
demo1.appendChild(d); 
//alert(m.innerHTML); 
} 
demo.onmouseleave = function(){MyMar = setInterval(Marquee,speed)} 
return demo; 
} 
}

函数参数的imga是你要传入img地址的数组,border是图片的边框属性,margin是图片间的距离,w是外层div的width,h同理,step是计时器执行一次图片移动的步数,speed是计时器的时间间隔.
上面的计时器代码借用了网上的一段代码,不过我自己做了些改进.
下面给出调用代码:
<html> 
<head> 
<title>Untitled Document</title> 
</head> 
<body> 
<script src="kongjian.js"></script> 
<script> 
var a=sx.activex.dynamicpic.init(["1 (1).jpg","1.jpg","1 (2).jpg","1 (3).jpg"],"2px red solid",5,500,100,2,10); 
document.body.appendChild(a); 
</script> 
</body> 
</html>

好了,基本搞定,有什么问题还请多多交流啊!
Javascript 相关文章推荐
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
Apr 26 Javascript
JS实现商品倒计时实现代码
May 03 Javascript
jquery的map与get方法详解
Nov 04 Javascript
jQuery结合HTML5制作的爱心树表白动画
Feb 01 Javascript
Jquery promise实现一张一张加载图片
Nov 13 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
Jan 26 Javascript
JS设置cookie、读取cookie
Feb 24 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
AngularJS 自定义过滤器详解及实例代码
Sep 14 Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 Javascript
js实现滚动条自动滚动
Dec 13 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 #Javascript
javascript采用数组实现tab菜单切换效果
Dec 12 #Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 #Javascript
日历查询的算法 如何计算某一天是星期几
Dec 12 #Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 #Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 #Javascript
用js判断页面是否加载完成实现代码
Dec 11 #Javascript
You might like
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
php判断linux下程序问题实例
2015/07/09 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
Javascript动画的实现原理浅析
2015/03/02 Javascript
javascript中this的四种用法
2015/05/11 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
2017/04/28 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
python将数据插入数据库的代码分享
2020/08/16 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
《天安门广场》教学反思
2014/04/23 职场文书
董事长助理工作职责
2014/06/08 职场文书
投诉信范文
2015/07/02 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers