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操作select下拉列表框的代码
Jun 04 Javascript
js Dialog 去掉右上角的X关闭功能
Apr 23 Javascript
js实现模拟银行卡账号输入显示效果
Nov 18 Javascript
编写高质量JavaScript代码的基本要点
Mar 02 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
在微信小程序里使用watch和computed的方法
Aug 02 Javascript
在node中使用jwt签发与验证token的方法
Apr 03 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 Javascript
微信小程序开发之获取用户手机号码(php接口解密)
May 17 Javascript
原生js实现拖拽移动与缩放效果
Aug 24 Javascript
js+html+css实现手动轮播和自动轮播
Dec 30 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
CI框架源码阅读,系统常量文件constants.php的配置
2013/02/28 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
Discuz!X中SESSION机制实例详解
2015/09/23 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
JS使用onerror捕获异常示例
2016/08/03 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
微信小程序 require机制详解及实例代码
2016/12/14 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python自动安装pip
2014/04/24 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python访问抓取网页常用命令总结
2017/04/11 Python
Python编程实现正则删除命令功能
2017/08/30 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
读书笔记怎么写
2015/07/01 职场文书
结婚十年感言
2015/07/31 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
python munch库的使用解析
2021/05/25 Python
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript