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 相关文章推荐
模仿jQuery each函数的链式调用
Jul 22 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
Sep 28 Javascript
JS的location.href跳出框架打开新页面的方法
Sep 04 Javascript
JQuery表单验证插件EasyValidator用法分析
Nov 15 Javascript
jquery+php随机生成红包金额数量代码分享
Aug 27 Javascript
AngularJS轻松实现双击排序的功能
Aug 30 Javascript
探索webpack模块及webpack3新特性
Sep 18 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
详解Vue CLI3配置解析之css.extract
Sep 14 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 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 Array交叉表实现代码
2010/08/05 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
Laravel下生成验证码的类
2017/11/15 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
各种常用浏览器getBoundingClientRect的解析
2009/05/21 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
编写简单的jQuery提示插件
2014/12/21 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
Python3访问并下载网页内容的方法
2015/07/28 Python
Python 爬虫的工具列表大全
2016/01/31 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
python装饰器的特性原理详解
2019/12/25 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Matplotlib.pyplot 三维绘图的实现示例
2020/07/28 Python
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
慈善募捐倡议书
2015/04/27 职场文书
离职信范文
2015/06/23 职场文书
校园运动会广播稿
2015/08/19 职场文书
社区宣传标语口号
2015/12/26 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
PHP中strval()函数实例用法
2021/06/07 PHP
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python
pycharm无法安装cv2模块问题
2022/05/20 Python