[Js]滑动门效果
描述:鼠标移动到一副图片上,会显示该副图片的全貌,而其他图片会显示概貌

一、没有动画效果的运动
思路:
1.定好每张图片的初始位置(第一张完全显示,234只露出一部分)
2.计算每道门的移动距离(即未显露的部分)
3.绑定鼠标滑过事件
window.onload=function(){
var box=document.getElementById("box");
var img=box.getElementsByTagName("img");
//单张图片宽度
var imgWidth=img[0].offsetWidth;
//露出的宽度
var exposeWidth=160;
//设置容器总宽度
var boxWidth=imgWidth+exposeWidth*(img.length-1)
box.style.width=boxWidth+"px";
//设置图片初始位置
function setImgspos(){
for(var i=1,len=img.length;i<len;i++){ //len在for循环的初始化语句里先定义好,这样就不需要每次都计算img的个数了,比for(var i=1;i<img.length;i++)性能高
img[i].style.left=imgWidth+exposeWidth*(i-1)+"px";
}
}
setImgspos();
//计算每道门打开时应移动的距离
var translate=imgWidth-exposeWidth;
for(var i=0,len=img.length;i<len;i++){
(function(i){ //这里为什么需要匿名函数?(简单来说是函数变量作用域的问题)img[i].onmouseover=function(){}这个函数内部使用了变量i,但是i没有定义,于是向外查找,找到for循环里定义的i,点击事件是for循环执行完毕后才开始执行的,即此时i=4,所以会报错img[i]没有定义,这里加一层匿名函数相当于闭包处理,i以形参的方式传递给内层函数
img[i].onmouseover=function(){
setImgspos(); //每次移上去先重置位置
for(var j=1;j<=i;j++){ //第二个循环体作用:可能会移多道门(比如放到第三道门上,二和三都要动,不是只动三,另外第一道门永远不动)
img[j].style.left=parseInt(img[j].style.left)-translate+"px";
}
};
})(i); //这个i是实参
}
};
二、展开加速、收拢减速的运动
注意:设置每道门初始位置时,不需要在写一个function了,因为要分别写打开和关闭动画,会造成一个卡顿,瞬间闪烁。
思路:
1.需要鼠标滑过这道门的初始位置
2.需要鼠标滑过这道门的结尾位置
3.需要一个速度和定时器来完成缓缓移动的过程
window.onload=function(){
var box=document.getElementById("box");
var img=box.getElementsByTagName("img");
//单张图片宽度
var imgWidth=img[0].offsetWidth;
//露出的宽度
var exposeWidth=160;
//设置容器总宽度
var boxWidth=imgWidth+exposeWidth*(img.length-1)
box.style.width=boxWidth+"px";
//设置图片初始位置
for(var i=1,len=img.length;i<len;i++){
img[i].pos=img[i].style.left=imgWidth+exposeWidth*(i-1)+"px";
}
function openDoor(el,translate){
var begin=parseInt(el.pos);
var end=begin-translate;
var iSpeed=10;
setTimeout(function(){
el.style.left=parseInt(el.style.left)-iSpeed+"px"; //为什么不用begin?每次的初始位置会变
iSpeed*=1.5; //没有这句话就是匀速运动
if(parseInt(el.style.left)<=end){
el.style.left=end+"px";
}else{
setTimeout(arguments.callee,25); //定时器有名字可以直接调用,没名字,就用原生js方法arguments.callee
}
},25);
};
function closeDoor(el,translate){
var begin=parseInt(el.pos)-translate; //关门默认情况是张开的
var end=begin+translate; //这里可以直接写var end=parseInt(el.pos);
var iSpeed=100;
setTimeout(function(){
el.style.left=parseInt(el.style.left)+iSpeed+"px"; //为什么不用begin?每次的初始位置会变
iSpeed=Math.ceil(iSpeed*0.7); //没有这句话就是匀速运动
if(parseInt(el.style.left)>=end){
el.style.left=end+"px";
}else{
setTimeout(arguments.callee,25); //定时器有名字可以直接调用,没名字,就用原生js方法arguments.callee
}
},25);
};
var translate=imgWidth-exposeWidth;
for(var i=0,len=img.length;i<len;i++){
(function(i){
img[i].onmouseover=function(){
//开门 自己和自己左边的全部循环到
for(var j=1;j<=i;j++){
openDoor(img[j],translate);
}
//关门 自己右边的全部循环到
for(var j=i+1;j<img.length;j++){
closeDoor(img[j],translate);
}
};
})(i);
}
};
[Js]滑动门效果的更多相关文章
- JS切割图片-滑动门效果
转载请注明来源:https://www.cnblogs.com/hookjc/ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...
- HTML+CSS技术实现网页滑动门效果
一.什么是滑动门 大家在网页中经常会见到这样一种导航效果,因为使用频率广泛,所以广大的程序员给它起了一个名字,叫做滑动门.在学习滑动门之前,首先你要了解什么是滑动门. 小米官网,网页滑动门效果 二.实 ...
- js 滑动门的实现
原理:滑动门,这里以图片进行实例,首先设定主盒子div的宽度和高度设定,并进行图片初始化位置的设定,然后将图片绑定事件,并设定要达到的效果 html代码: <!DOCTYPE html> ...
- JS滑动门,JQuery滑动门
<a href="#" id="one1" onmouseover="setTab('one',1,2)" class="h ...
- JS实现滑动门效果
html部分 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin ...
- 【原生JS】滑动门效果
效果图: 思路:通过每次鼠标移动至目标上使所有图片重置为初始样式再向左移动目标及其左侧每个图片隐藏部分距离即实现. HTML: <!DOCTYPE html> <html> & ...
- js滑动提示效果
js代码 漂亮的动画效果:在靠右上角:背景颜色为红,字体颜色为白色 滑动 变大 上移 缓慢渐变消失 function tishi() { $("#tishi").attr(&q ...
- DIV+CSS滑动门效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [Jquery]滑动门效果
$(function(){ var $box=$("#box"); var $img=$box.find("img"); var imgWid ...
随机推荐
- 超实用压力测试工具-ab工具
在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...
- 实现jQuery扩展总结
开发自己需要的jQuery插件,看个示例说明<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&qu ...
- (六)动手写第一个shell
1.编辑器.编译器.运行方法(脚本的3种执行方法)(1)shell程序是文本格式的,只要是文本编辑器都可以.但是因为我们的shell是要在linux系统下运行的,所以换行符必须是'\n',而windo ...
- MySQL 定时器EVENT学习
原文:http://blog.csdn.net/lifuxiangcaohui/article/details/6583535 MySQL 定时器EVENT学习 MySQL从5.1开始支持event功 ...
- oracle查询一个数据库有几张表
登录sys用户后通过user_tables表查看当前用户下表的张数.sql:conn / as sysdba;sql:select count(*) from user_tables ;解释:必须是登 ...
- 转:设计模式-----桥接模式(Bridge Pattern)
转自:http://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html 记得看原始链接的评论. 学习设计模式也有一段时间了,今天就把我整理 ...
- 探索 Pexpect,第 1 部分:剖析 Pexpect
Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.本文章介绍 Pexp ...
- 数据库事物四大特性-ACID
事务的:原子性.一致性.分离性.持久性 事物(transaction)是由一些列操作序列构成的执行单元,这些单元要么都做,要么不做,是一个不可分割的工作单元. 数据库事物的四个基本性质(ACID) 1 ...
- LTIB常用命令3
http://blog.csdn.net/junht/article/details/7656540 LTIB 中的包 4.3.1 查看哪些包是使能的,并且可以安装 在配置ltib之前,您可以在一个 ...
- jQuery封装函数
//1,插件命名:jQuery.插件名.js 为拉避免和其他库的冲突// //2,自定义插件尽量避免使用$ 如果非要使用$就一定要将jQuery传递进去,//写在最后加一个小括号写jquery ;结束 ...