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 相关文章推荐
Firefox getBoxObjectFor getBoundingClientRect联系
Oct 26 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
Aug 12 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
jQuery判断是否存在滚动条的简单方法
Sep 17 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
JS设计模式之观察者模式实现实时改变页面中金额数的方法
Feb 05 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 Javascript
vue项目设置scrollTop不起作用(总结)
Dec 21 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
JavaScript交换变量常用4种方法解析
Sep 02 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
Jan 26 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
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
JavaScript 事件对象的实现
2009/07/13 Javascript
JS 遮照层实现代码
2010/03/31 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
Node.js文件操作详解
2014/08/16 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
2016/03/14 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQuery用FormData实现文件上传的方法
2016/11/21 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
关于react中组件通信的几种方式详解
2017/12/10 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
浅谈angular2子组件的事件传递(任意组件事件传递)
2018/09/30 Javascript
python中pycurl库的用法实例
2014/09/30 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
python strip() 函数和 split() 函数的详解及实例
2017/02/03 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
2019/10/18 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
行政前台岗位职责
2013/12/04 职场文书
党支部书记岗位职责
2015/02/15 职场文书
技术入股合作协议书
2016/03/21 职场文书