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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐share.js
Dec 23 Javascript
JS实现一个按钮的方法
Feb 05 Javascript
一分钟理解js闭包
May 04 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
May 07 Javascript
vue如何获取点击事件源的方法
Aug 10 Javascript
jQuery实现动态加载select下拉列表项功能示例
May 31 jQuery
uni-app 支持多端第三方地图定位的方法
Jan 03 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
微信小程序实现电影App导航和轮播
Nov 30 Javascript
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
从源码角度来回答keep-alive组件的缓存原理
Jan 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
php 中的str_replace 函数总结
2007/04/27 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python实用代码片段收集贴
2015/06/03 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
.NET初级开发工程师面试题(包括Javascript)
2012/08/22 面试题
Java如何调用外部Exe程序
2015/07/04 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
企业理念标语
2014/06/09 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
研究生简历自我评
2015/03/11 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
厉行节约工作总结
2015/08/12 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书