热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

jquery——左右按钮点击切换一组图片功能

一、最终效果二、功能分析1、需求分析点击左边pre按钮,显示前面三个图片,点击右边的next按钮,显示后面的一组(三个)图片。初始化只显示next按钮,到最后一组只显示pre按钮,中间过程两按钮都显示
一、最终效果

>a>li>
<li><a href="Javascript:;"><img src="images/activity02-1410.jpg">a>li>
<li><a href="Javascript:;"><img src="images/activity03-1410.jpg">a>li>
<li><a href="Javascript:;"><img src="images/activity03-1410.jpg">a>li>
<li><a href="Javascript:;"><img src="images/activity02-1410.jpg">a>li>
ul>
div>

 #activity-slide是整个幻灯的入口,后面会将其作为参数来调用幻灯功能。

 两个按钮ps_pre和ps_next将添加click事件响应点击切换功能。

 3、功能分析

因为左右切换都是三个为一组的切换,如果li总个数不是3的倍数时,需要增加li节点填满。

//需要追加的li节点个数
var addli = 0;
//一组切换3个li
var num=3;
var lisize = a.find("ul li").size();//获取li个数

//判断需要添加的li节点数量
var reminder=lisize%num;
if(lisize%num!=0){addli = num-reminder;}
else{addli = 0;}
addlist();

上面是判断得到需要追加的个数lisize,然后调用addlist追加。

addlist如下,从ul的第一个li开始复制,需要几个就复制出几个节点追加。节点追加完毕后重新计算ul的宽度。

        function addlist(){
for(i=0;i){
var html = a.find("ul li").eq(i).html();
a.find(
"ul").append("
  • "+html+"
  • ");
    }
    a.find(
    "ul").css({"width":(w_li+margin_li*2)*(lisize+addli)});
    }

    现在准备工作已经完成了。接下来就是给按钮添加响应事件。在幻灯切换时涉及到左右按钮的显示和隐藏,所以先说这个按钮显示功能,将此分装成一个函数btnshow。

            /***
    参数说明:
    now:当前是第几组,默认是0
    c:总共有几组
    d:初始化时li的个数
    e:每组显示li个数
    **
    */
    function btnshow(now,c,d,e){
    if(d<=e){//如果初始化时li的个数小于一组要显示的数,则不显示pre和next按钮
    a.find(".ps_next").hide();
    a.find(
    ".ps_pre").hide();
    }
    else if(now==0){//初始化now=0,显示第一组,只显示next
    a.find(".ps_next").show();
    a.find(
    ".ps_pre").hide();
    }
    else if(now==c-1){//显示到最后一组,只显示pre
    a.find(".ps_next").hide();
    a.find(
    ".ps_pre").show();
    }
    else{//显示中间组,pre和next都需要显示
    a.find(".ps_next").show();
    a.find(
    ".ps_pre").show();
    }
    }

     接下来幻灯切换。这里a是传入的参数,也就是 #activity-slide。给它下面的所有的pre和next添加响应。

    向前一组,组数now减一,now是几,就让ul的margin-left为负几倍的组宽(即3倍的(li宽度+margin宽度)),然后显示对于按钮即可。

    向后滑动一组li同理。

            function photoscroll(){
    a.find(
    ".ps_pre").on("click",function(){//console.log(num);
    now--;
    if(now >= 0){
    a.find(
    "ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }
    });

    a.find(
    ".ps_next").on("click",function(){//console.log(num);
    now++;
    if(now <(lisize+addli)/num){
    a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }
    });
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }

    4、问题

    可能是jquery写的原因,加了浏览器缩放尺寸响应后点击切换按钮响应有延时。

    三、代码

    1、用到图片

    >a>li>
    <li><a href="Javascript:;"><img src="images/activity02-1410.jpg">a>li>
    <li><a href="Javascript:;"><img src="images/activity03-1410.jpg">a>li>
    <li><a href="Javascript:;"><img src="images/activity03-1410.jpg">a>li>
    <li><a href="Javascript:;"><img src="images/activity02-1410.jpg">a>li>
    ul>
    div>
    div>

    div>


    body>
    html>
    <script src="http://code.jquery.com/jquery-latest.js">script>
    <script>
    //首页图片滚动切换
    (function($){
    $.photolist
    =function(a){
    var w_li = a.find("li").width();
    var h_li = a.find("li").height();
    var margin_li=parseInt(a.find("li").css("marginLeft"));
    var now = 0;
    var num = 0;
    var addli = 0;
    var lisize = a.find("ul li").size();
    var htmlall = a.find("ul").html();

    //判断每次滚动数量
    /*
    var w_body = $("body").width();
    if(w_body <=1170){
    var num = 3;
    }else if(w_body<= 1380){
    var num = 4;
    }else if(w_body>1380){
    var num = 5;
    }
    */
    var num=3;

    //判断需要添加的li节点数量
    var reminder=lisize%num;
    if(lisize%num!=0){addli = num-reminder;}
    else{addli = 0;}
    addlist();
    //点击滚动事件
    photoscroll();

    $(window).resize(
    function(){
    //location.reload();
    now = 0;
    addli
    = 0;
    a.find(
    "ul").html(htmlall);//html内容还原初始值
    a.find(".ps_next").show();//按钮样式初始化
    a.find(".ps_pre").hide();
    //判断每次滚动数量
    /*
    var w_body = $("body").width();
    if(w_body <=1170){
    var num = 3;
    }else if(w_body<= 1380){
    var num = 4;
    }else if(w_body>1380){
    var num = 5;
    }
    */
    var num=3;
    //判断需要添加的li节点数量
    var reminder=lisize%num;
    if(lisize%num!=0){addli = num-reminder;}
    else{addli = 0;}
    addlist();
    w_li
    = a.find("li").width();
    margin_li
    =parseInt(a.find("li").css("marginLeft"));
    a.find(
    "ul").css({"width":(w_li+margin_li*2)*(lisize+addli)});
    a.find(
    "ul").animate({"margin-left":0});//ul位置还原
    btnshow(now,parseInt((lisize+addli)/num),lisize,num);
    });


    function addlist(){
    for(i=0;i<addli;i++){
    var html = a.find("ul li").eq(i).html();
    a.find(
    "ul").append("

  • "+html+"
  • ");
    }
    a.find(
    "ul").css({"width":(w_li+margin_li*2)*(lisize+addli)});
    //console.log(a.find("ul li").size());
    }
    function photoscroll(){
    a.find(
    ".ps_pre").on("click",function(){//console.log(num);
    now--;
    if(now >= 0){
    a.find(
    "ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }
    });

    a.find(
    ".ps_next").on("click",function(){//console.log(num);
    now++;
    if(now < (lisize+addli)/num){
    a.find("ul").animate({"margin-left":-now*num*(w_li+margin_li*2)});
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }
    });
    btnshow(now,parseInt((lisize
    +addli)/num),lisize,num);
    }
    /***
    参数说明:
    now:当前是第几组,默认是0
    c:总共有几组
    d:初始化时li的个数
    e:每组显示li个数
    **
    */
    function btnshow(now,c,d,e){
    if(d<=e){//如果初始化时li的个数小于一组要显示的数,则不显示pre和next按钮
    a.find(".ps_next").hide();
    a.find(
    ".ps_pre").hide();
    }
    else if(now==0){//初始化now=0,显示第一组,只显示next
    a.find(".ps_next").show();
    a.find(
    ".ps_pre").hide();
    }
    else if(now==c-1){//显示到最后一组,只显示pre
    a.find(".ps_next").hide();
    a.find(
    ".ps_pre").show();
    }
    else{//显示中间组,pre和next都需要显示
    a.find(".ps_next").show();
    a.find(
    ".ps_pre").show();
    }
    }

    }
    })(jQuery);
    $.photolist($(
    "#activity-slide"));
    script>View Code

    css部分:

    View Code

     

    本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4956293.html有问题欢迎与我讨论,共同进步。

     


    推荐阅读
    • 二维码的实现与应用
      本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
    • Adobe Flash Player:功能与历史回顾
      本文详细介绍了Adobe Flash Player的功能及其在互联网发展史上的重要角色,同时探讨了其停止支持的原因及后续影响。 ... [详细]
    • H5技术实现经典游戏《贪吃蛇》
      本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
    • 3D打印与延时摄影的创意融合
      本文探讨了如何将3D打印技术与延时摄影技术相结合,创造出令人惊叹的视觉效果。通过详细介绍实现这一创意的过程,包括环境搭建、设备安装及软件设置等关键步骤。 ... [详细]
    • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
    • CSS Border 属性:solid 边框的使用详解
      本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
    • 2023年,Android开发前景如何?25岁还能转行吗?
      近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
    • 使用CSS实现鼠标悬停时图片或按钮的平滑放大效果
      通过CSS技术,当鼠标悬停在图片或按钮上时,可以实现元素平滑放大的视觉效果,并可自由调整动画的持续时间。本文将详细介绍如何利用CSS实现这一功能。 ... [详细]
    • 本周三大青年学术分享会即将开启
      由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
    • 使用Vue指令实现下拉菜单效果
      使用Vue指令实现下拉菜单效果模仿重庆红岩历史革命博物馆官网的导航栏内容和效果,使用Vue实现。官网地址如下:https:www.hongyan.info官网效果效果图片展示代码展 ... [详细]
    • Requests库的基本使用方法
      本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
    • 利用Vue实现点击商品详情跳转功能的方法解析
      本文将详细介绍如何使用Vue框架实现从前端展示页面点击商品信息(如图片或文本)后,能够平滑跳转至该商品的详细信息页面。整个过程不仅涉及前端页面的设计与交互,还包括与后端接口的数据交互,旨在为开发者提供一种高效且实用的解决方案。 ... [详细]
    • 图像处理学习笔记:噪声分析与去除策略
      本文详细探讨了不同类型的图像噪声及其对应的降噪技术,旨在帮助读者理解各种噪声的本质,并掌握有效的降噪方法。文章不仅介绍了高斯噪声、瑞利噪声、伽马噪声、指数噪声、均匀噪声和椒盐噪声等常见噪声类型,还特别讨论了周期噪声的特性及处理技巧。 ... [详细]
    • 如何将955万数据表的17秒SQL查询优化至300毫秒
      本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
    • 全选 jquery
      2019独角兽企业重金招聘Python工程师标准$(#checkAllSelectedOrganization).live(click,function(){$(in ... [详细]
    author-avatar
    双木子婷_893
    这个家伙很懒,什么也没留下!
    Tags | 热门标签
    RankList | 热门文章
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有