jQuery图片切换动画效果


Posted in Javascript onFebruary 28, 2017

最近在写前端页面,作为只写过两个月前端的人来说,感觉用jq什么的写出来自己想要的效果真的是太棒了,刚好今天花了一下午完成了一个图片切换的特效:

效果图:

jQuery图片切换动画效果

jq 代码,都是自己写出来的,弄了一下午完成的,初学者,整理以后留着用。

直接上代码:

////// 
// 2017-2-27 // 
////// 
$(function(){ 
 var num = 0; 
 var divStr = '#imageShowSmallAnchor'; // 移动 div 
 var s  = 300; 
 $('.imgNum').click(function(){ 
  var _this  = $(this); 
  var status = _this.attr('data-status'); 
  var total_num = _this.parent().find('ul li').length; 
  var numSPic = 4;//最多显示的小图的个数 
  var src; 
   
   
  if(status == 'left'){ 
   if(num <= 0){ 
    num = total_num-1; 
   }else{ 
    num--; 
   } 
  }else{ 
   if(num >= total_num-1){ 
    num = 0; 
   }else{ 
    num++; 
   } 
  } 
  // 4 一次做多显示四张小图 $("#div").stop(false, true);//让当前动画直接到达末状态 ,继续下一个动画 
  // 第一种情况 当小图数量小于5时, 直接进行右移。 
  if (total_num <= numSPic) {$(divStr).stop(true,false).animate( 
   {left:num*106+39+"px"},s); 
  } else{ 
   //////// 
   // 图片左移 // 
   //////// 
   if (status == 'left') { 
    if (num < total_num - numSPic) { 
     _this.parent().find('ul li').eq(num).show(); 
    } else{ 
     // 特殊情?r 左移时,从第一张图切换到最后一张图时 
     // if判断 当前是否显示最后张图,如果不是最后一张图 则当变成右移时,无需刷新小图的显示状态。 
     // 左移时,需要将李 全部隐藏后, 再将最后的 numSPice 张图显示出来, 
     if (num == total_num - 1) { 
      _this.parent().find('ul li').hide(); 
      for (var x = total_num-1; x >= total_num - numSPic; x--) { 
       _this.parent().find('ul li').eq(x).show(); 
      } 
     } 
    } 
   } else{ 
    //////// 
    // 图片右移 // 
    //////// 
    if (num >= numSPic) { 
     _this.parent().find('ul li').eq(num-numSPic).hide(); 
    } else{ 
     // 特殊情?r 右移时,从最后一张图切换到第一张图时 
     // 判断 是否是第一张图, 如果不是则再变成左移时,无需刷新小图的显示状态 
     if (num == 0) { 
      for (var x = 0; x < numSPic; x ++) { 
       _this.parent().find('ul li').eq(x).show(); 
      } 
     } 
    } 
   } 
   // 快速点击切换时吗,动画出现滞后和反复问题, 
   // 让当前动画直接到达末状态 ,继续下一个动画 $('#div').stop(false, ture); $('#div').stop().animate(); 集合使用效果更佳。 
   $(divStr).stop(false, true); 
   //////// 
   // 样式左移 // 
   //////// 
   if (status == 'left') { 
    // 39 定位divStr 的left距离 父级元素的像素距离 
    // 等样式移动到最右边时,样式位置固定 
    // $(divStr).position().left 获取定位元素 left值。 
    if ($(divStr).position().left <= 39 ) { 
     $(divStr).stop().animate({left:"39px"}); 
     // 当从第一张切换到最后一张时,样式应在最右边。 
     if (num==total_num-1) { 
      $(divStr).stop().animate({left:3 * 106 + 39 + "px"},s); 
     } 
    } else{ 
     $(divStr).stop().animate({left:"-=106px"},s); 
    } 
   } else{ 
    //////// 
    // 样式右移 // 
    //////// 
    if ($(divStr).position().left >= 357) { 
     $(divStr).stop().animate({left:"357px"}); 
     // 当从最后一张切换到第一张时,样式应在最左边。 
     if (num==0) { 
      $(divStr).stop().animate({left:"39px"},s); 
     } 
    } else{ 
     $(divStr).stop().animate({left:"+=106px"},s); 
    } 
   } 
  } 
  src = _this.parent().find('ul li').eq(num).find('img').attr('src'); 
  _this.parents('.xq-imgSW').find('.imgSW-top li img').attr('src',src); 
 }); 
  
 // 点击小图切换 大图 和小图上的样式。 
 $('.imgSW-bt li').click(function(){ 
  var _this = $(this); 
  var src; 
  num = _this.index(); 
  // parseInt(10/3); 整除 
  // 获取点击的位置,来计算 样式的位置。 
  var X = parseInt(_this.position().left/106); 
 
  $(divStr).stop().animate({left:X*106+39+"px"},s); 
  src = _this.find('img').attr('src'); 
  _this.parents('.xq-imgSW').find('.imgSW-top li img').attr('src',src); 
 }); 
});

HTML 界面代码:

<div class="xq-imgSW"> 
  <div class="imgSW-top"> 
   <ul> 
    <li><img src="images/xq-img1.png" alt=""></li> 
   </ul> 
  </div> 
  <div class="clear"></div> 
  <div class="imgSW-bt"> 
   <input class="imgSW-zuo imgNum" type="button" data-status="left"> 
   <div id="imageShowSmallAnchor"></div> 
   <ul> 
    <li class="imgSW-xz"><img class="imgex" src="images/xq-img-s1.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型1</div> 
    </li> 
     
    <li><img src="images/xq-img-s2.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型2</div> 
    </li> 
    <li><img src="images/xq-img-s3.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型3</div> 
    </li> 
    <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型4</div> 
    </li> 
    <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型5</div> 
    </li> 
    <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型6</div> 
    </li> 
    <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型7</div> 
    </li> 
    <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt=""> 
     <div class="imgSW-bot">户型8</div> 
    </li> 
   </ul> 
   <input class="imgSW-you imgNum" data-status="right" type="button"> 
  </div> 
 </div>

<div id="imageShowSmallAnchor"></div> 是定位上去的

另外:
快速点击是会出现动画延迟现象,影响体验,处理动画延迟jQuery stop()语法:

$("#div").stop();//停止当前动画,继续下一个动画 
$("#div").stop(true);//清除元素的所有动画  
$("#div").stop(false, true);//让当前动画直接到达末状态 ,继续下一个动画
$("#div").stop(true, true);//清除元素的所有动画,让当前动画直接到达末状态

在jq中有用到并有注释。
// 让当前动画直接到达末状态 ,继续下一个动画 $('#div').stop(false, ture); $('#div').stop().animate(); 集合使用效果更佳。 

作为前端新手,记录下,以后可能会用到。

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

Javascript 相关文章推荐
游戏人文件夹程序 ver 4.03
Jul 14 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
jQuery实现跨域iframe接口方法调用
Mar 14 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
Apr 29 Javascript
JS及JQuery对Html内容编码,Html转义
Feb 17 Javascript
详解EasyUi控件中的Datagrid
Aug 23 Javascript
inner join 内联与left join 左联的实例代码
Sep 18 Javascript
浅谈Angular2 模块懒加载的方法
Oct 04 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
webpack下实现动态引入文件方法
Feb 22 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
jQuery 判断元素整理汇总
Feb 28 #Javascript
jQuery倒计时代码(超简单)
Feb 27 #Javascript
js实现图片左右滚动效果
Feb 27 #Javascript
jquery横向纵向鼠标滚轮全屏切换
Feb 27 #Javascript
原生js实现旋转木马轮播图效果
Feb 27 #Javascript
jQuery实现弹窗居中效果类似alert()
Feb 27 #Javascript
js实现简单的手风琴效果
Feb 27 #Javascript
You might like
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
解决laravel id非自增 模型取回为0 的问题
2019/10/11 PHP
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
python执行等待程序直到第二天零点的方法
2015/04/23 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
Jupyter 无法下载文件夹如何实现曲线救国
2020/04/22 Python
pyecharts在数据可视化中的应用详解
2020/06/08 Python
大学四年个人自我小结
2014/03/05 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
Python学习之os包使用教程详解
2022/03/21 Python