第一次写Banner插件版

条件:使用JQ。

使用情况:当目标元素调用该插件时,插件产生的元素会替换该目标元素,并且在目标元素位置生成。需要输入一组图片地址数组(对象还没有实现,慢慢改善)默认宽高是600*400,可在后面的参数中自行设置;

CSS部分:

* {

margin: 0;

padding: 0;

}

#bannerWrap {

position: relative;

overflow: hidden;

}

#bannerMiddle {

position: absolute;

top: 0px;

}

#bannerMiddle img {

float: left;

}

#bannerWrap>a {

position: absolute;

width: 50px;

height: 60px;

text-align: center;

line-height: 60px;

top: 50%;

transform: translateY(-50%);

text-decoration: none;

background-color: rgba(0, 0, 0, 0.3);

color: white;

display: none;

}

#bannerWrap>a:nth-of-type(1) {

left: 0px;

}

#bannerWrap>a:nth-of-type(2) {

right: 0px;

}

#bannerXiabiao{

position: absolute;

bottom: 10px;

height: 30px;

list-style: none;

}

#bannerXiabiao>li {

width: 30px;

height: 30px;

float: left;

margin-left: 10px;

border-radius: 50%;

color: white;

background-color: rgba(0, 0, 0, 0.5);

text-align: center;

line-height: 30px;

}

#bannerXiabiao>li:nth-child(1) {

display: none;

}

#bannerXiabiao .color {

background: red;

}

JS部分:

$.fn.extend({

//传入一个图片数组

Banner:function(imgArr,width,height) {

var linkObj=$("<link rel=stylesheet type=text/css href=css/Banner.css>");//动态加载CSS样式

$("head").append(linkObj);

var wrap = $("<div id=bannerWrap><div id=bannerMiddle></div><a href=‘###‘>&lt;</a><a href=‘###‘>&gt;</a><ul id=‘bannerXiabiao‘></ul></div>");

$(this).after(wrap);

$(this).remove();

var imgageArr = [];

var loadNum = 0;

var imgWidth = width||600;//传入参数中有width就使用width

var imgHeight=height||400;

var middle = $("#bannerMiddle");

var xiabiao = $("#bannerXiabiao");

var wrap = $("#bannerWrap");

wrap.css({height:imgHeight,width:imgWidth});

var move=wrap.children("a");

var last = move.eq(0);

var next =move.eq(1);

var index = 1;

var imgNum = imgArr.length + 1;

var guoduTimer, autoTimer,clickBolTimer;

var clickBol=true;//控制连续点击

for(var i = 0; i < imgArr.length; i++) {

var img = new Image();

img.index = i;

img.src = imgArr[i];

img.onload = function() {

loadNum++;

imgageArr.push(this);

if(loadNum == imgArr.length) {

main();

}

}

}

function main() {

  //开启自动播放

function openAuto() {

autoTimer = setInterval(function() {

index++;

if(index == imgLength) {

index = 1;

middle.css("left", 0);

}

change();

}, 4000)

}  

//一次点击

2秒后才能继续点击

function clickBolTime(){

clearTimeout(clickBolTimer);

clickBol=false;

clickBolTimer=setTimeout(function(){

clickBol=true;

},2000)

}

wrap.hover(function() {

move.each(function() {

$(this).css("display", "block");

})

clearInterval(autoTimer);

}, function() {

openAuto();

move.each(function() {

$(this).css("display", "none");

})

})

  //用于获取加载好的图片

function getImg(x) {

for(var i = 0; i < imgageArr.length; i++) {

if(x == imgageArr[i].index) {

return imgageArr[i];

}

}

}

for(var i = 0; i <= imgageArr.length; i++) {

var img = document.createElement("img");

img.style.width=imgWidth+"px";

img.style.height=imgHeight+"px";

var li = $("<li>" + i + "</li>");

if(i == 0 || i == imgageArr.length) {

img.src = getImg(imgageArr.length - 1).src;

} else {

img.src = getImg(i - 1).src;

}

middle.append(img);

xiabiao.append(li);

}

middle.css({

width:imgNum * imgWidth,

height:imgHeight,

left:-imgWidth,

});

xiabiao.width((imgNum - 1) * 40);

var center = (wrap.width() - xiabiao.width()) / 2;//让下标居中显示

xiabiao.css("left", center);

var imgLength = middle.children().length;

next.click(function() {

if(clickBol){

index++;

if(index == imgLength) {

index = 1;

middle.css("left", 0);

}

clickBolTime()

change();

}

})

last.click(function() {

if(clickBol){

index--;

if(index < 0) {

index = imgLength - 2;

middle.css("left", -(imgLength - 1) * imgWidth);

}

clickBolTime()

change();

}

})

var lis = xiabiao.children();

lis.eq(1).addClass("color");

lis.click(function() {

if(clickBol){

index = $(this).index()

change();

clickBolTime()

}

})

function change() {

lis.each(function() {

$(this).removeClass();

})

if(index == 0) {

lis.last().addClass("color");

} else {

lis.eq(index).addClass("color");

}

var e = -index * imgWidth;

middle.animate({"left":e},{duration:1000,})

}

openAuto();

window.onfocus=function(){

openAuto();

}

window.onblur=function(){

clearInterval(autoTimer);

}

}

}

}

时间: 2024-08-20 15:47:55

第一次写Banner插件版的相关文章

第一次写jquery插件,来个countdown计时器吧

之前同学做个购物商城秒杀活动需要计时器的功能,在用jquery提供的countdown插件时,一直报错,貌似还需要依赖除jquery之外的其他插件,搞了半天也没搞成功,就叫我帮忙写个.然而我并没有写过插件,不过刚好趁这次端午好好地锻炼一把吧,顺便在这儿存个代码,自己的思路不好,大神们请不要见笑哈... 废话不多说,直接上代码: =======================================请叫我华丽的分割线=====================================

写jQuery插件

手把手教你怎么写jQuery插件 这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的‘攻城狮’们能和大家一起分享,一起成长.点击左边我头像下边的“加入qq群”,一起分享,一起交流,当然,可以一起吹水.哈,不废话,进入正题. jQuey是一个非常好用的javascript类库,提供了非常多的接口给程序员使用.但在某些具体方面,并没有完全提供解决方法,这就要求我们自己实现.jQuery官方也提供jQuery拓展的标准.编写jQuery插件时,应该注意一下几点原则: 1. 避免

写chrome插件---一个优酷自动加粉丝助手

写chrome插件主要就是写js , 我们要构造界面(HTML), 以及样式(CSS),  以及chrome给我们提供的jsAPI, 主要是chrome的API, 调试的话可以使用chrome的开发者工具(f12)直接调试; API地址的截图先过一遍, 这个非常重要: 如果从来没写过chrome插件, 我们可以参考这个打开, 里面有很多现成的DEMO, 我们能够直接在线看一些简单的DEMO代码: 我写的这个youku自动订阅助手使用了bootstrap和jQ(个人认为是标配,(●'?'●)),也

手把手教你怎么写jQuery插件

[原创作品]手把手教你怎么写jQuery插件 这次随笔,向大家介绍如何编写jQuery插件.啰嗦一下,很希望各位IT界的'攻城狮'们能和大家一起分享,一起成长.点击左边我头像下边的"加入qq群",一起分享,一起交流,当然,可以一起吹水.哈,不废话,进入正题. jQuey是一个非常好用的javascript类库,提供了非常多的接口给程序员使用.但在某些具体方面,并没有完全提供解决方法,这就要求我们自己实现.jQuery官方也提供jQuery拓展的标准.编写jQuery插件时,应该注意一下

写jquery插件【轮播图】历程

轮播图插件的任务已经接近尾声,在书写轮播图期间确实有一些小的感触的.感兴趣的可以访问我的轮播图的线上地址:轮播图 首先,轮播图插件其实并不是我第一次写,之前也写过,不过那时候是按照别人的思路写下来的,算起来大概有一年了,这次又一次开始轮播图是因为拜读了<单页面Web应用 JavaScript从前端到后端>的这本书的1-4章,我开始跃跃欲试的想把它用到自己的代码中,书本中前四章的思想是将js模块化,我就跟着作者的代码思路以及代码习惯先尝试着做了个轮播图,发现作者的模块化思想非常好,时间长了,养成

第一次写,python爬虫图片,操作excel。

第一次写博客,其实老早就注册博客园了,有写博客的想法,就是没有行动,总是学了忘,忘了丢,最后啥都没有,电脑里零零散散,东找找,西看看,今天认识到写博客的重要性. 最近闲着看了潭州教育的在线直播课程,颇受老师讲课实用有感.只作为自己笔记学习,我们都知道学习一门编程都是先照抄,在创作.这里完全按照老师讲解,照抄作为学习. 一.Python抓取豆瓣妹子图. 工具:python3.6.0;bs4.6.0;xlwt(1.2.0)需要版本对应,之前就安装了bs4但是运行的时候提示版本不对应.可以在线升级:p

一步一步写jQuery插件

转载自:http://www.cnblogs.com/joey0210/p/3408349.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式了,如下

分享一个近期写的简单版的网页采集器

分享一个近期写的简单版的网页采集器 功能特点: 1.可通过配置,保存采集规则. 2.可通过采集规则,进行数据采集. 3.可分页,分关键字,进行采集. 4.可保存数据至数据库,文本中. ........... 功能还比较简单,喜欢深入的可以继续深入下去,暂时还没有登录的功能,因为登录功能涉及到的范围比较广,待日后慢慢研究后再开发. 我先上个图让大家一睹为快吧: 首先看看页面,我们要采集这个网站的文章 接下来,首先是查找分页,获得分页里面的文章链接,接着查找内容页需要采集的字段,生成规则,进行采集.

锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

1.表单验证插件Validation   2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuery UI   5.jQuery Cookie   6.遮罩层插件:thickbox 7.编写jQuery插件 <1>编写插件的目的:给已经有的一些列方法或函数做一个封装,一遍在其他地方使用,方便后期维护和提高开发效率. <2>三种类型的插件 a:封装对象方法的插件 jQuery.fn.extend()