js以及jquery实现手风琴效果


Posted in Javascript onApril 17, 2020

最近又复习了jQuery的知识,既然jQuery是javascript的一个库。jQuery能做到的事情javascript也能做到。因此用这两种方法实现了图片手风琴效果。

按照惯例,还是上代码吧,因为代码里有我的注释也就相当于解释了!

先看一下javascript的代码吧:

div布局:注意哦,里面的图片我们用js代码生成

<div id="box">
 <ul>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 <li></li>
 </ul>
</div>

css样式:

<style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 ul{
 list-style: none;
 }
 #box{
 width: 1150px;
 height: 400px;
 margin: 50px auto;
 border: 1px solid red;
 overflow: hidden;
 }
 #box ul{
 width: 1300px;
 }
 #box ul li{
 width: 240px;
 height: 400px;
 float: left;

 }
 </style>

要写js代码了。这里封装了一个完整的运动框架(我个人 觉得哈,你可以继续完善,不过你要告诉我,我也学习一下!)

/*
 * 实现动画的步骤:
 1.怎样得到当前的样式 封装一个函数 getStyle()
 2.步长的计算 用(目标位置 - 当前的样式) / 10
 3. 缓动动画原理: 盒子本身的样式 + 步长(不断变化的)
 */
/*
 * css设置透明度,一般在ie中用的是filter:alpha(opacity=0);
而在firefox中,一般就是直接使用opacity:0
*/
// 多个属性的运动框架 以及添加回调函数
function animate(obj,json,fn){ // 目标obj json 属性:属性值 fn回调函数
 clearInterval(obj.timer);
 obj.timer = setInterval(function(){
 var flag = true;// 用来判断是否停止定时器 
 // 遍历json
 for (var attr in json) { //attr 属性 json[attr]值
 var curStyle = 0;
 if (attr == "opacity") {
 curStyle = parseInt(getStyle(obj,attr)*100);
 } else{
 curStyle = parseInt(getStyle(obj,attr));// 获得数值
 }
 // 得到步长 目标位置就是json[attr]
 var step = (json[attr]-curStyle) / 10;
 step = step > 0 ? Math.ceil(step) :Math.floor(step);

 // 判断透明度
 if (attr == "opacity") { // 判断用户有没有输入opacity
 if ("opacity" in obj.style) { 
  obj.style.opacity = (curStyle + step) / 100;
 } else{
  obj.style.filter = "alpha(opacity="+(curStyle +step)+")";
 }

 } else if(attr == "zIndex"){
 obj.style.zIndex = json[attr];
 } else{
 obj.style[attr] = curStyle +step +"px";
 }
 // 判断是否已经都到了目标位置 只要其中一个不满足条件 就不应该停止定时器
 if (curStyle != json[attr]) {
 flag = false;
 }
 }
 // 判断定时器条件 是否该停止了
 if (flag) {
 clearInterval(obj.timer)
 // 当定时器停止后,动画也就结束了.如果有回调函数就执行回调函数
 if(fn){
 fn();
 }

 }
 },30);
}

// 封装函数 得到属性
function getStyle(obj,attr) { // 谁的 那个属性
 if(obj.currentStyle) // ie 等
 {
 return obj.currentStyle[attr]; // 返回传递过来的某个属性
 }
 else
 {
 return window.getComputedStyle(obj,null)[attr]; // w3c 浏览器
 }
}

接着我们在js里面引入我们写的框架

<script src="animate.js"></script>

接下来,写js代码

<script>
 window.onload = function(){
 var box = document.getElementById("box");
 var lis = box.children[0].children;
 for (var i = 0; i < lis.length;i++) {
  lis[i].style.backgroundImage = "url(images/"+(i+1)+".jpg)";
  lis[i].onmouseover = function(){
  for (var j = 0; j < lis.length;j++) {
  animate(lis[j],{width:100});
  }
  animate(this,{width:800});
  }
  lis[i].onmouseout = function(){
  for (var k = 0; k < lis.length;k++) {
  animate(lis[k],{width:240});
  }
  }
 }
 }
</script>

好啦,这样就完成了,具体效果你自己动手看看吧。完整的下载地址为js版本的手风琴效果

写完了js,发现代码量好多啊,看看jquery代码,哦买嘎,切记一定要先引入jQuery的包,再写代码哈!

<script src="jquery-1.11.1.min.js"></script>
 <script>
 $(function(){
 $("#box li").each(function(index,ele){
  $(ele).css("background","url(images/"+(index+1)+".jpg)");
 }).mouseenter(function(){
  $(this).stop().animate({width:800},500).siblings("li").stop().animate({width:100},500);
 }).mouseleave(function(){
  $("#box li").stop().animate({width:240},500);
 });
 });

 </script>

精简了好多。
来吧,我们的jQuery版本手风琴效果下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 全角转换实现代码
Jul 17 Javascript
高亮显示web页表格行的javascript代码
Nov 19 Javascript
JS模拟面向对象全解(一、类型及传递)
Jul 13 Javascript
js中匿名函数的创建与调用方法分析
Dec 19 Javascript
BootStrap3学习笔记(一)之网格系统
May 20 Javascript
js实现非常棒的弹出div
Oct 06 Javascript
浅谈jquery拼接字符串效率比较高的方法
Feb 22 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
js es6系列教程 - 基于new.target属性与es5改造es6的类语法
Sep 02 Javascript
深入理解Angular4订阅(Subscribe)与取消
Nov 22 Javascript
基于Vue制作组织架构树组件
Dec 06 Javascript
JavaScript事件的委托(代理)的用法示例详解
Feb 18 Javascript
写jQuery插件时的注意点
Feb 20 #Javascript
Node.js获取前端ajax提交的request信息
Feb 20 #Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 #Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 #Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 #Javascript
You might like
修改Zend引擎实现PHP源码加密的原理及实践
2008/04/14 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
python检查目录文件权限并修改目录文件权限的操作
2020/03/11 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
Linux操作面试题
2012/05/16 面试题
EJB3.1都有哪些改进
2012/11/17 面试题
工厂厂长的职责
2013/12/12 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
民主评议党员工作总结
2014/10/20 职场文书
李白故里导游词
2015/02/12 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
党支部培养考察意见
2015/06/02 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang