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 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 Javascript
使用 Node.js 对文本内容分词和关键词抽取
May 27 Javascript
详解JS中统计函数执行次数与执行时间
Sep 04 Javascript
浅谈React Event实现原理
Sep 20 Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
如何制作自己的原生JavaScript路由
May 05 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
php adodb连接mssql解决乱码问题
2009/06/12 PHP
php5.3 注意事项说明
2013/07/01 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
多广告投放代码 推荐
2006/11/13 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
彻底理解Python list切片原理
2017/10/27 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
如何将无状态会话Bean发布为WEB服务,只有无状态会话Bean可以发布为WEB服务?
2015/12/03 面试题
爱心捐款倡议书
2014/04/14 职场文书
建材投资建议书
2014/05/16 职场文书
公司领导班子对照材料
2014/08/18 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
春季运动会开幕词
2015/01/28 职场文书
岗位聘任协议书
2015/09/21 职场文书
离婚协议书格式范本
2016/03/18 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫