热门标签 | 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有问题欢迎与我讨论,共同进步。

     


    推荐阅读
    • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
    • PHP 5.2.5 安装与配置指南
      本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
    • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
    • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
    • 深入理解C++中的KMP算法:高效字符串匹配的利器
      本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
    • Python自动化处理:从Word文档提取内容并生成带水印的PDF
      本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
    • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
    • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
    • 如何高效创建和使用字体图标
      在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
    • 苹果新专利或将引领无边框手机时代
      苹果公司最近公布了一项新的专利技术,该技术能够在设备屏幕中嵌入光线传感器,这标志着苹果在实现无边框手机设计上迈出了重要一步。这一创新将极大提升手机的屏占比,并可能为未来的iPhone带来革命性的变化。 ... [详细]
    • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
    • RT,个人博客图片管理(方便管理,大家 ... [详细]
    • 2023年京东Android面试真题解析与经验分享
      本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
    • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
    • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
    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社区 版权所有