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 相关文章推荐
本地对象Array的原型扩展实现代码
Dec 04 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
javascript模拟post提交隐藏地址栏的参数
Sep 03 Javascript
JavaScript中的原型prototype属性使用详解
Jun 05 Javascript
JavaScript设计模式初探
Jan 07 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
浅谈js原生拖放
Nov 21 Javascript
jQuery Json数据格式排版高亮插件json-viewer.js使用方法详解
Jun 12 jQuery
vue异步加载高德地图的实现
Jun 19 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 Javascript
Js on及addEventListener原理用法区别解析
Jul 11 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 前一天或后一天的日期
2008/06/28 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
打开电脑上的QQ的python代码
2013/02/10 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
python实时监控cpu小工具
2018/06/21 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python requests指定出口ip的例子
2019/07/25 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
python和c语言哪个更适合初学者
2020/06/22 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
网页设计个人找工作求职信
2013/11/28 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
妇产科护理心得体会
2016/01/22 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书