插件!插件!天天听到有人求这个插件,那个插件的,当然,用第三方插件可以大幅提高开发效率,但作为新手,我还是喜欢自己来实现,主要是我有时间!

今天我来给大家分享下用原生JS实现图片轮播的写法

前辈们可以无视下面这段废话:

在开始之前,先说下我学前端到现在的一点感受。到今天应该有两个月左右了吧,基本每天6-10小时的学习时间,纯自学,据说培训不靠谱!本人目前的阶段是只会三大件(HTML5、CSS3、javascript),其它所有知识都还排在学习计划后面....现在正处在迷茫期,不知道下面该先学什么了!不管了,先把三大件整溜一点再说吧,前辈们若有什么好的建议,希望指点!

从HTML5到CSS3,一路过来,感觉前端挺简单的,就有点信心满满,动力十足,接着学JS,以前学过C#、苹果的swift,都是面向对象的强类型的语言,比较先进,不过我还是喜欢前端,所以转到这里来了,开始学JS也觉得挺容易的,就是感觉这门语言有点乱,跟别人不太一样!而权威指南有些东西不容易弄明白,没办法,就多百度,多看别人对一些比如闭包、原型等概念的理解,慢慢的也就能掌握的7788了,到了这个阶段,你也许已经慢慢的了解到,原来前端它包括很多东西!一堆的第三方类库、框架等等,还有很多其它东西,总之,新名词不断的在你眼前冒出来,有的说这个要过时了,那个即将是主流,好乱!好乱!接下去我该怎么走?先学什么?后学什么?

我目前就处在这个阶段,有时候会连续两天什么都看不下去,也睡不着觉,心烦意乱,就是:走火入魔了!

我就想啊,我这是怎么了?想不明白啊!算了,先休息下,锻炼下身体吧!就去跑步,瞎逛!一边思考:怎么让自己重新进入状态!

后来我是这么做的:给自己点糖吃!(自己先动手做一些比较简单的实例)

我发现,这糖还真甜,我居然能做出来!成就感悠然而生,动力也就十足了!我就一个实例接着一个实例的写,不懂、对API不熟悉就翻文档(在看别人的代码之前自己先写,实在不会了再看),慢慢的,我感觉自己真的又回来了,开始步入正轨了!

我还特地看了下,目前大部分招前端的公司都需要什么样的人,然后重新给自己制定了学习计划,当然,因为眼下我有时间,所以我想拿一段时间出来先巩固下3大基础,多练习,然后回头再过一遍文档,多了解它们的基本的、内在的原理!下一步不管学什么,就容易上手的多了!同时,继续多了解前端!多了解这个职业的前景和走向,就是给自己建立一个前端的世界观,这样,学起来才不会迷失方向!

至于该学哪些第三方类库、框架,我目前也不知道,JQ过时了吗?需不需学?我也不知道,也先不管了,就先玩玩原生吧!以后应该自然就知道了吧!

实战开始,下面是代码和演示,写法参考了这位前辈:仿QQ轮播图

前辈的面向对象写法,目前本人还学不来,我只会写一些函数,呵呵!(图片来自网络,也可自己切个300*200图片来查看效果,点击‘渐进渐出’按钮开始)

*{
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
#slide{
position: absolute;
top: 100px;
left: 50px;
width: 300px;
height: 200px;
border: 1px solid gray;
}
#slide .blog-name{
display: block;
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 25px;
line-height: 25px;
background-color: rgba(155,155,155,0.5);
z-index: 4;
cursor: pointer;
text-indent: 3px;
}
#slide-nav{
position: absolute;
right: 5px;
bottom: 5px;
z-index: 5;
}
#slide-nav li{
display: inline-block;
width: 16px;
text-align: center;
line-height: 16px;
border-radius: 5px;
cursor: pointer;
overflow:hidden;
}
#slide-nav li:hover,.selected{
background-color: #336699;
color: white;
}
.slide-content1{
position: absolute;
width: 300px;
height: 200px;
font-size: 0;
}
.slide-content1 a{
position: absolute;
cursor: pointer;
}
.slide-content1 a:visited{color: black;}
#model-btn{
position: absolute;
top: -25px;
font-size: 20px;
}

苏福的博客

<ul id="slide-nav">
</ul> <div id="slide-main" class="slide-content1 slide-content2">
<a class="a-img" title="用原生JS读写CSS样式的方法总结" href="http://www.cnblogs.com/susufufu/p/5749922.html" target="_blank">
<div>
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1247027539,1217965501&fm=21&gp=0.jpg">
</div>
</a>
<a class="a-img" title="DOM中的事件处理概览与原理" href="http://www.cnblogs.com/susufufu/p/5768431.html" target="_blank">
<div>
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4286855119,2694540617&fm=21&gp=0.jpg">
</div>
</a>
<a class="a-img" title="选取文档元素的方法总结" href="http://www.cnblogs.com/susufufu/p/5738673.html" target="_blank">
<div>
<img src="https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=4042865154,1782505495&fm=21&gp=0.jpg">
</div>
</a>
<a class="a-img" title="窗口、窗体之间的关系" href="http://www.cnblogs.com/susufufu/p/5714020.html" target="_blank">
<div>
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2603911195,1920098549&fm=21&gp=0.jpg">
</div>
</a>
<a class="a-img" title="你真的知道setTimeout是如何运行的吗?" href="http://www.cnblogs.com/susufufu/p/5759480.html" target="_blank">
<div>
<img src="https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=4104312586,1589909074&fm=21&gp=0.jpg">
</div>
</a>
</div> <div id="model-btn">
<input type="button" id="model-btn1" value="渐进渐出">
<input type="button" id="model-btn2" value="从右向左">
<input type="button" id="model-btn3" value="从上至下">
</div>

一开始,先想,该怎么实现:不就利用定时器改变图片,过场改变图片的opacity吗?

一、html排版比较简单:

`

 <ul id="slide-nav">
</ul> <div id="slide-main" class="slide-content1">
<a class="a-img" title="" href="" target="_blank">
<div>
<img src="lg1.png">
</div>
</a>
...
</div>
...

`
slide-info用来显示图片标题,slide-nav是数字按钮,slide-main就是图片容器了,里面放图片链接,

    标签里面没写li,因为它是通过JS动态创建的;

    二、CSS样式的设置,只要你亲自去体验,就都能明白了,注意点:

    1. 自己布局前,先最好把父元素加border,这样一幕了然,最后再去掉
    2. ul li 等很多标签默认是有padding的,所有要把它设为0;

      *{ margin: 0; padding: 0; list-style: none; text-decoration: none; }
    3. height: 25px;line-height: 25px;两个相等,可以让字居中
    4. z-index只相对于你的兄弟和子辈,对于旁系的亲戚无效,如果想让它显示在旁系的亲戚前面,就设置旁系的亲戚的祖先,比如你的爷爷是宰相,你的二爷是农民,那么你们家所有人身份都比你二爷家的所有人的身份都尊贵
    5. position: absolute;也是和他的父辈有关系的,父辈没设置定位,靠不住啊,那就继续往上找依靠,直到找到为止,然后依靠他来定位!
    6. 如果你要实现从右向左的效果,记住font-size:0;清楚图片之间的间距,让图片肩并肩!

    俗话说,熟能生巧,只有CSS基础扎实,才能把控好布局!比如下面这个双飞翼布局,不需要定位就能实现:

    body{
    margin: 0;
    padding: 0;
    }
    .header,.footer{
    width: 100%;
    height: 50px;
    line-height: 50px;
    text-align: center;
    background-color: greenyellow;
    }
    .container{
    overflow: hidden;
    *zoom: 1;
    }
    .left{
    float: left;
    width: 100px;
    height: 100px;
    margin-left: -100%;
    background-color: green;
    }
    .main{
    float: left;
    width: 100%;
    height: 100px;
    background-color: gray;
    }
    .right{
    float: left;
    width: 200px;
    height: 100px;
    margin-left: -200px;
    background-color: gold;
    }
    .center{
    padding-left: 100px;
    padding-right: 200px;
    }

    header
    main-center

    left
    right
    footer

    三、代码的实现

    先写大纲:

    var sufuImageScrooller = function(){

    function getById(id){...} //通用获取元素对象

    function setOpacity(elem,level){...} //设置透明度

    function hide(img){...} //淡入

    function show(omg){...} //淡出

    function inOutModel(nums,navId,imgContainerId,imgInfoId,delay){ ... } //主函数体

    return {

    inOutModel: inOutModel,

    ...

    }

    }();

    这样的写法就可以通过sufuImageScrooller来调用inOutModel方法了,sufuImageScrooller. inOutModel(5,'slide-nav','slide-main','slide-info',3500);

    inOutModel(nums,navId,imgContainerId,imgInfoId,delay)参数:nums创建li数量,必须和图片数量对应,navId数字按钮容器id,imgContainerId图片容器id,imgInfoId显示图片title信息id,delay指定切换图片延迟时间;

    大纲写出来了,就完成了一大半了,其它就是具体细节代码的实现了,我写的不是很好,只能说实现了这个功能,大家自己琢磨,如果有好的建议欢迎提出;

    从inOutModel函数开始切入,然后步步深入,关键在于动手打出来,光看的话体会没那么深刻!

    好了,就介绍到这一步了,不会的自己多翻文档API,也可留言问我

    原生JS实现轮播+学前端的感受(防止走火入魔)的更多相关文章

    1. 原生js焦点轮播图

      原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...

    2. 原生js实现轮播图

      原生js实现轮播图 很多网站上都有轮播图,但找到一个系统讲解的却很难,因此这里做一个简单的介绍,希望大家都能有所收获,如果有哪些不正确的地方,希望大家可以指出. 原理: 将一些图片在一行中平铺,然后计 ...

    3. 封装一个简单的原生js焦点轮播图插件

      轮播图实现的效果为,鼠标移入左右箭头会出现,可以点击切换图片,下面的小圆点会跟随,可以循环播放(为了方便理解,没有补2张图做无缝轮播).本篇文章的主要目的是分享封装插件的思路. 轮播图我一开始是写成非 ...

    4. 原生JS实现轮播图的效果

      原生JS实现轮播图的效果: 只要缕清了全局变量index的作用,这个轮播图也就比较容易实现了:另外,为了实现轮这个效果,有几处clearInterval()必须写上.废话不多说,直接上代码,修复了几个 ...

    5. 使用原生js将轮播图组件化

      代码地址如下:http://www.demodashi.com/demo/11316.html   这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explor ...

    6. 用原生js封装轮播图

      原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...

    7. 原生js焦点轮播图的实现

      继续学习打卡,武汉加油,逆战必胜!今日咱们主要探讨一下原生js写轮播图的问题, 简单解析一下思路: 1,首先写好css样式问题 2,考虑全局变量:自动播放的定时器,以及记录图片位置的角标Index 2 ...

    8. 前端基础功能,原生js实现轮播图实例教程

      轮播图是前端最基本.最常见的功能,不论web端还是移动端,大平台还是小网站,大多在首页都会放一个轮播图效果.本教程讲解怎么实现一个简单的轮播图效果.学习本教程之前,读者需要具备html和css技能,同 ...

    9. 手把手原生js简单轮播图

      在团队带人,突然被人问到轮播图如何实现,进入前端领域有一年多了,但很久没自己写过,一直是用大牛写的插件,今天就写个简单的适合入门者学习的小教程.当然,轮播图的实现原理与设计模式有很多种,我这里讲的是用 ...

    随机推荐

    1. 后端码农谈前端(CSS篇)第五课:CSS样式

      一.背景: CSS 允许应用纯色作为背景,也允许使用背景图像创建相当复杂的效果. 1.背景色 可以使用 background-color 属性为元素设置背景色.这个属性接受任何合法的颜色值. 例如: ...

    2. Sparse Filtering 学习笔记(三)目标函数的建立和求解

        Sparse Filtering 是一个用于提取特征的无监督学习算法,与通常特征学习算法试图建模训练数据的分布的做法不同,Sparse Filtering 直接对训练数据的特征分布进行分析,在所谓 ...

    3. [C] C语言中的布尔值

      C不具备显示的布尔类型,所以使用整数来代替,规则是:零是假,任何非零值皆为真. 反过来说,如果逻辑表达式为真其值一定为真,若逻辑表达式为假其值一定为零.

    4. 每日学习总结<一> 2015-8-31

        Java : 抽象类的简单概念和意义: 包名:域名相反.例: com.eric.test; 访问权限: (public/default/private/protected) public: 可以修 ...

    5. maven中使用junit老是找不到包

      如题,烦恼好久,突然看到scope一直是test,改成compile就好了. compile (编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在 ...

    6. SQL Server 2014里的针对基数估计的新设计(New Design for Cardinality Estimation)

      对于SQL Server数据库来说,性能一直是一个绕不开的话题.而当我们去分析和研究性能问题时,执行计划又是一个我们一直关注的重点之一. 我们知道,在进行编译时,SQL Server会根据当前的数据库 ...

    7. .NET Core爬坑记 1.0 项目文件

      前言: 之所以要写这个系列是因为在移植项目到ASP.NET Core平台的过程中,遇到了一些“新变化”,这些变化有编译方面的.有API方面的,今天要讲的是编译方面的一些问题.我把它们整理后分享出来,以 ...

    8. [译]学习IPython进行交互式计算和数据可视化(五)

      第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...

    9. 使用DevExpress官方汉化文件对界面进行汉化的过程

      在较早期的Dev开发中,基本上都是在使用一个DLL包的汉化文件,如基于13.1的汉化包文件Dxper.LocalizationCHS.Win.v13.1.5.dll,这个汉化包也比较方便,大多数时候复 ...

    10. iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)

      iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态        1.UICon ...