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 相关文章推荐
Javascript基础教程之for循环
Jan 18 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
Jan 26 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 Javascript
微信小程序云开发之使用云数据库
May 17 Javascript
webpack4 SplitChunks实现代码分隔详解
May 23 Javascript
layui.tree组件的使用以及搜索节点功能的实现
Sep 26 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 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
经验几则 推荐
2006/09/05 Javascript
jquery 锁定弹出层实现代码
2010/02/23 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
使用js获取伪元素的content实例
2017/10/24 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
简单掌握Python中glob模块查找文件路径的用法
2016/07/05 Python
基于python socketserver框架全面解析
2017/09/21 Python
python将回车作为输入内容的实例
2018/06/23 Python
Python 变量类型详解
2018/10/10 Python
python pygame实现2048游戏
2018/11/20 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
英国太阳镜品牌:Taylor Morris Eyewear
2018/04/18 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
新春寄语大全
2014/04/09 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
vue选项卡切换的实现案例
2022/04/11 Vue.js