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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
用jquery与css打造个性化的单选框和复选框
Oct 20 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
jquery实现从数组移除指定的值
Jun 24 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
详解在express站点中使用ejs模板引擎
Sep 21 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
Oct 25 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
Jan 12 Javascript
react 应用多入口配置及实践总结
Oct 17 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源代码
2006/10/09 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
11款基于Javascript的文件管理器
2009/10/25 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
Vue Cli3 创建项目的方法步骤
2018/10/15 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
JavaScript 异步时序问题
2020/11/20 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python实现电子书翻页小程序
2019/07/23 Python
django 环境变量配置过程详解
2019/08/06 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
医大实习自我鉴定
2013/12/07 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
人身意外保险授权委托书
2014/10/01 职场文书
公务员检讨书
2014/11/01 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
vue router 动态路由清除方式
2022/05/25 Vue.js