在jQuery插件库上看到一个轮播图觉得很漂亮,就自己尝试做了一个,实现左侧小图定时滚动,小图和底部的原点可以点击切换大图,离开后小图继续滚动,白色背景始终保持在当前图上。

思路:HTML结构分了大图片部分、小图导航和底部圆点三个部分;通过克隆图片列表加长了列表长度,当滚动到克隆的图片部分时,将整个列表拉回原位,看起来就像连续滚动的效果了。

  • html
<div class="images">    //大图部分<ul class="iunit"><li><img src="data:images/a1.png" alt=""></li><li><img src="data:images/a2.png" alt=""></li><li><img src="data:images/a3.png" alt=""></li><li><img src="data:images/a4.png" alt=""></li><li><img src="data:images/a5.png" alt=""></li><li><img src="data:images/a6.png" alt=""></li></ul>
</div>
<div class="nav">     //小图导航部分 li有6个<ul class="nunit"><li class="cur"><a href="javascript:;"><img src="data:images/a1x.png" alt=""><span class="title">Title</span><br><span class="descrip">Description</span></a></li></ul>
</div>
<div class="sub_nav">   //底部圆点导航部分<ul class="sunit"><li class="cur"></li><li></li><li></li><li></li><li></li><li></li></ul>
</div>复制代码

css就不放上来了,全部源文件在最后的链接,下面是js部分代码:

1.获取元素和克隆列表

var $carousel = $("#carousel");
var $iunit = $carousel.find(".iunit");  //大图片部分的ul
var $nunit = $carousel.find(".nunit");  //小图片部分的ul
var $sunit = $carousel.find(".sunit");  //圆点部分的ul
var idx=0, _idx = 0;   //设置三个信号量分别控制三个部分,降低三个部分之间的耦合性
var s_idx = 0;//克隆两个图片列表
$iunit.find("li").clone().appendTo($iunit);
$nunit.find("li").clone().appendTo($nunit);//获取每一个里表中的li,这里要在克隆之后获取,否则就只能获取到克隆之前的个数
var $iunit_lis = $iunit.find("li");
var $nunit_lis = $nunit.find("li");
var $sunit_lis = $sunit.find("li");
复制代码

2.添加鼠标移入和移除事件监听

//添加鼠标移入监听,给后面加cur添加important否则权重不够行内
$nunit_lis.mouseenter(function(){$(this).css("background-color", "rgba(255,255,255,0.3)");
});
$nunit_lis.mouseleave(function(){$(this).css("background-color", "rgba(0,0,0,0.08)");
});
复制代码

3.左侧导航部分添加点击事件监听

$nunit_lis.click(function(){//当前点击的下标1-12idx = $(this).index();$(this).siblings("li").removeClass("cur");$(this).addClass("cur");//判断下标,当大于7时,下标值减去6,返回1-6if(idx > 6){idx -= 6;}$nunit_lis.eq(idx+6).addClass("cur");//添加运动事件,内部判断索引值为6时,still移动,但是移动之后拉回到0$iunit.animate({"left": -980 * idx}, 300, function(){if(idx>5){$(this).css("left", 0);}});//小圆点跟随信号量idx值一同改变$sunit_lis.eq(idx).addClass("cur").siblings("li").removeClass("cur");
});
复制代码

4.底部圆点添加点击事件监听

$sunit_lis.click(function(){s_idx = $(this).index();$sunit_lis.eq(s_idx).addClass("cur").siblings("li").removeClass("cur");$iunit.animate({"left": -980 * s_idx}, 300);
});
复制代码

5.封装运动函数,开启定时器让导航滚动起来

function go(){_idx++;$nunit.animate({"top": -70 * _idx}, 300, function(){if(_idx>5){_idx=0;$nunit.css("top", 0);}})
}var timer = setInterval(go, 1000);$carousel.mouseenter(function(){clearInterval(timer);
});
$carousel.mouseleave(function(){timer = setInterval(go, 1000);
});
复制代码

小结:没有完全实现作者的所有功能,原轮播可以在滚动时自动切换当前小图,并且始终保持在中间位置,看了一下他的源代码是使用了一个插件,还有一些css3的知识,最近刚开始学习css3,回头再重新用css3重做应该会做的更好。

源代码戳这里

刚刚学会使用GitHub,可以上传一些之前做的demo了!加油加油,还有那么多要学的东东!css3好有意思啊,又学到好多新方法,已经想做点什么来试试手了!

转载于:https://juejin.im/post/5a40f4c4518825772a4b3a3b

jQuery-demos轮播图练习(一)相关推荐

  1. 用js和jQuery做轮播图

    Javascript或jQuery做轮播图 css样式 <style> a{ text-decoration:none; } .naver{ width: 100%; position:r ...

  2. 网页直播源码,JQuery实现轮播图方法

    网页直播源码,JQuery实现轮播图方法 html <!DOCTYPE html> <html> <head lang="en"><met ...

  3. ajax轮播图控件,基于json数据的jquery卡片轮播图插件

    这是一款基于json数据的jquery卡片轮播图插件.该插件通过ajax来获取卡片的信息,动态显示卡片.它还提供不使用ajax的方式来获取数据,和其它一些api接口. 使用方法 在页面中引入jquer ...

  4. 基于JQuery 编写轮播图插件

    基于JQuery 编写轮播图插件 不管是实际开发还是平时的小项目中 ,页面一定有且多个的轮播图,那么为了效率大家可以考虑封装这样的小插件.下面一起看看他的使用方法吧 使用需要准备(往下滑动会看到): ...

  5. jQuery实现轮播图(无缝轮播,附效果图),代码有详解。

    jQuery实现轮播图 这里用了一些有颜色的div块当做图片,复制之后可以直接用,有需要的话再根据自己的需求替换就可以了. 功能: (1)左右无缝轮播. (2)鼠标移上去会停止,移走继续动. (3)点 ...

  6. Jquery实现轮播图效果

    Jquery实现轮播图效果 首先是html <div id="box"><img src="./day6/am/轮播图/img/1.jpg" ...

  7. jQuery 实现轮播图

    jQuery 轮播图 预览图: 使用jquery实现轮播图要比用原生js简单许多,代码也少很多. 思路 1.外层盒子设置为一个图片的大小 2.内层盒子为所有图片的宽度,图片左浮动 3.外层盒子设置ov ...

  8. JQuery实现轮播图及其原理

    源码: <!DOCTYPE html> <html><head><meta charset="utf-8" name="view ...

  9. Jquery实现轮播图效果(fadeIn()和fadeOut()方法的应用)

    2019独角兽企业重金招聘Python工程师标准>>> 1.jquery.js从官网上下载最新的,使用外链导入到html中, 下载地址: http://jquery.com/down ...

  10. 自己定义jquery插件轮播图

    轮播图-html <!DOCTYPE html> <html lang="en"> <head><meta charset="U ...

最新文章

  1. Flex的NumericStepper控件
  2. reduce_sum() got an unexpected keyword argument 'keep_dims'
  3. NumberUtils用法
  4. 移动开发工程师面试题集:Android iOS
  5. 惊呆了!这篇论文全文都是脏话,可编辑部居然对它评价极佳并发表了!
  6. 将一个长度最多为30位数字的十进制非负整数转换为二进制数(Java)
  7. GridView position = 0重复加载的问题
  8. 【指纹识别】基于matlab GUI指纹打卡系统【含Matlab源码 867期】
  9. Discuz漏洞复现
  10. matlab 2010无法运行程序,图文操作win7系统运行matlab2010找不到指定的程序的还原步骤...
  11. catia工程图纸中如何画图_catia工程图 方法和步骤
  12. php的rps,如何理解RPS的本质
  13. 【游记】NOI2021
  14. Android实现打开手机淘宝并自动识别淘宝口令弹出商品信息功能
  15. C++ 调用打印机 打印一段文字
  16. JavaBean 与 POJO
  17. Codeforces D. Omkar and Bed Wars
  18. UVa 11062 Andy's Second Dictionary(刘汝佳紫书升级题)
  19. 如果你只知道开心网,那你就OUT了。。。。。
  20. 关于Google收购FeedBurner的一点感想

热门文章

  1. IDEA配置git环境
  2. 优酷开放SDK之setOnCompletionListener
  3. It is indirectly referenced from required .class file
  4. 1-4 开发工具的选择
  5. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)
  6. maven jetty 插件 允许修改 js
  7. 今天开通了自己的博客
  8. tomcat 部署脚本
  9. Spring事务管理TransactionManager
  10. 百度兴趣点下载工具设计和实现