Banner插件版
条件:使用JQ。
使用情况:当目标元素调用该插件时,插件产生的元素会替换该目标元素,并且在目标元素位置生成。需要输入一组图片地址数组(对象还没有实现,慢慢改善)默认宽高是600*400,可在后面的参数中自行设置;
CSS部分:
把CSS样式保存在名为Banner的CSS文件中,并且放在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>");
$("head").append(linkObj);//动态添加CSS样式
var wrap = $("<div id=bannerWrap><div id=bannerMiddle></div><a href='###'><</a><a href='###'>></a><ul id='bannerXiabiao'></ul></div>");
$(this).after(wrap);
$(this).remove();
var imgageArr = [];//存储加载好了的图片
var loadNum = 0;
var imgWidth = width||600;//有参数输入就自行参数
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)
}
//一次点击之后,两秒内不能点击
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);
}
}
},
}
调用例如:$("div").Banner(imgArr,600,400);
Banner插件版的更多相关文章
- js 控制Div循环显示 非插件版
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- VOL.1 利用vmware ThinApp 制作非XP下可以运行的IE6 【无插件版】(windows vista/7/8 x86/x64 )
作为一名前端开发工程师,不免要考虑IE6的兼容性,但是大部分挑剔的同行们估计都不会用XP,所以基本上IE6的兼容性测试,都是使用IE Tester或者虚拟机. IE Tester的话,很多地方模拟的还 ...
- 【小o地图Excel插件版】计算两点间驾车路径,获取途径道路、驾车距离、耗时等信息
小o地图Excel插件版:一款基于Excel软件开发的地图软件,提供基于Excel表格进行地理数据挖掘.地理数据分析.地图绘制.地图图表等功能的工具类软件.具有易用.高效.稳定的特点,能够满足地理数据 ...
- 【小o地图Excel插件版】不止能做图表,还能抓58、大众点评网页数据...
小o地图Excel插件版:一款基于Excel软件开发的地图软件,提供基于Excel表格进行地理数据挖掘.地理数据分析.地图绘制.地图图表等功能的工具类软件.具有易用.高效.稳定的特点,能够满足地理数据 ...
- Postman 安装及使用入门教程 (谷歌浏览器插件版)
postman 在 谷歌浏览器中插件版 http://www.cnblogs.com/mafly/p/postman.html Postman 4.1.2 下载地址: http://files.cnb ...
- Eclipse中使用JRebel实现项目热部署(Maven插件版)
JRebel实现项目热部署(Maven插件版) 热部署,就是在应用运行过程中不进行重启,可直接进行软件升级. 在开发过程中,热部署就是在项目运行过程中变更代码,无需重启服务器即可使代码生效. tomc ...
- js 函数的多图片懒加载(lazy) 带插件版完整解析
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS实现图片懒加载效果 页面需求 1 ...
- Google浏览器PostMan插件版安装步骤
PostMan插件版安装步骤: 第一步:把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar 第二步:右键点击该文件,并使用压缩软件(如winrar.360压缩等)对该压 ...
- OpenResty — Nginx全能插件版
官网: http://openresty.org/ 虽然是中国人做的,但没几个汉字..... 我用Nginx,是这样一个过程: 1. 系统rpm中的nginx,能让其跑起来 2. 玩配置文件 3. 玩 ...
随机推荐
- Node.js配合node-http-proxy解决本地开发ajax跨域问题
情景: 前后端分离,本地前端开发调用接口会有跨域问题,一般有以下3种解决方法: 1. 后端接口打包到本地运行(缺点:每次后端更新都要去测试服下一个更新包,还要在本地搭建java运行环境,麻烦) 2. ...
- appStore上传苹果应用程序软件发布流程
如有疑问,或者需要人帮忙,可以到QQ群:460325065首先确定帐号是否能发布, https://developer.apple.com/account,如果你打开Provisioning Port ...
- Firefox Portable Developer 52.0.0.6176-6178
FirefoxPortableDeveloper-52.0.0.6176.7z 47.9 MB FirefoxPortableDeveloper-52.0.0.6178.7z 55.8 MB
- 安全的将excel导入sqlite3的解决方案
最近在做一个小项目时,需要把一个excel中的数据保存到sqlite3数据库中以备后用,表中有字符也有数字,要用到特定的数据类型方便后续使用,参照网上的方法,将excel文件转换为csv文件后,在导入 ...
- libc++abi.dylib`__cxa_throw: 视频播放时异常
这两天研究视频播放,集成RTMP视频出现的异常,刚好看到一篇博客,楼主使用[AVAudioPlayer Play]时出现了异常...记录下来: 由于xcode中设置了当所有异常出现时的断点,,解决办法 ...
- jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
本文实例讲述了jQuery简单实现iframe的高度根据页面内容自适应的方法.分享给大家供大家参考,具体如下: 方式1: //注意:下面的代码是放在和iframe同一个页面中调用 $("#i ...
- Integer to English Words
https://leetcode.com/problems/integer-to-english-words/ 这题记得是<c 和指针>里的一道习题,三年前花了一晚上做过.现在花了大概40 ...
- Laravel5路由/home页面无法访问
报错信息: Not Found The requested URL /laravel5/public/home was not found on this server. 解决方法: 1.编辑apac ...
- 一个年轻的码农的一个C#项目
话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...
- vaadin学习,重要的网址
比较重要的几个:UI组件及示例程序:http://demo.vaadin.com/samplerBook of Vaadin:https://vaadin.com/bookAPI:https://va ...