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 相关文章推荐
jQuery与其它库冲突的解决方法
Jun 25 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
Jul 26 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
浏览器打开层自动缓慢展开收缩实例代码
Jul 04 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 Javascript
JS常用正则表达式总结【经典】
May 12 Javascript
javascript简单写的判断电话号码实例
May 24 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
JavaScript实现移动端带transition动画的轮播效果
Mar 24 Javascript
微信小程序仿抖音短视频切换效果的实例代码
Jun 24 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
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
JavaScript Event学习第十一章 按键的检测
2010/02/10 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
python 获取字符串MD5值方法
2018/05/29 Python
python中单例常用的几种实现方法总结
2018/10/13 Python
python实现杨氏矩阵查找
2019/03/02 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题
2020/06/17 Python
英国现代市场:ARKET
2019/04/10 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
汽车驾驶求职信
2013/10/25 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
酒店管理求职信范文
2014/04/06 职场文书
2014年销售部工作总结
2014/12/01 职场文书
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android