网站横幅切换jquery 插件
最近做一个web项目,站点首页需要像 百度统计 页面类似的切换横幅,有兴趣的可以先看看它的效果,这样就比较容易理解为什么我单独做个插件。其实类似的 jquery 插件网上类似的多的去了,随便网上下了两做了个demo 演示一下,效果不错吗!:) 我是在全屏的状态下看的,效果还行,当把屏幕切小之后问题就出来了,屏幕小了之后图片的后面部分显示不出来了,本来的效果应该是如果屏幕小了应该把图片两 边不重要的部分隐藏掉,但是由于网上的插件都是直接生成的 img 元素,我的网站页面body元素固定宽度,居中的,所以出现前面说的问题。
怎么办呢,本来想在别的插件基础上改一下,后来看改动比较多,干脆自己写个算了,以后用起来也方便。
我的思路是,首先要实现上面的效果不用 img 元素, 我选择了用 span 元素 给它添加背景图片,显示方式为 inline-block,这样比较容易。
由于需要切换 span 定位方式为绝对定位,外面包一层 div容器 定位方式为 relative 这样在切换的时候只要把要显示的 span 设置为 display: block; ,其余的全部设置为 display: none; 切换就解决了。
然后就是通用性问题,给插件留下灵活的配置项跟事件接口。想了想大概就需要几项吧。
- 设置项
- 图片切换间隔时间
- 动画完成时间
- 是否自动切换
- 事件接口
- 图片切换完成事件
- 切换到最后一张图片
- 插件加载完成
思路理清了,下面奉上插件代码:
/*
* 横幅切换插件
* 作者: 封浩
* 创建日期: 2015-04-03
* 版本: v1.0
*/
(function ($) {
var mySlider = function (element, options) {
var settings = $.extend({}, $.fn.switchImg.defaults, options);
var variables = {
currentIndex: 0,
nextIndex: 0,
total: 0,
paused: true, //当前切换状态是否停止
imgHeight: 0,
operation:"+"//控制移动方向
}; var slider = $(element); //图片切换容器
var sliderContent = $('<div></div>').addClass('nivo-main').width(slider.width());
//小圆点容器
var controlNav = $('<div></div>').addClass('nivo-controlNav').attr("data-stop", "true");
//左右切换按钮容器
var btnContent = '<div class="nivo-NextContent"><a class="nivo-prevNav" data-opt="-">前进</a><a class="nivo-nextNav" data-opt="+">后退</a><div style="clear: both;"></div></div>'; var bodyWidth = $("body").width();
var dataDiv = slider.find("div:first-child");
var self = this;
var images = dataDiv.find("img");
images.each(function (i) {
var child = $(this);
var link = child.attr("data-link");
var src = child.attr("src");
var height = "0", active = "", display = 'inline-block';
if (i == 0) {
variables.imgHeight = height = child.height() === 0 ? child.attr(height) : child.height();
active = "active";
} else {
bodyWidth = 0;
display = "none";
} if ($.trim(link) != "") {
sliderContent.append('<a href="' + link + '" target="_blank"><span style=\"background-image: url(' + src + '); width: ' + bodyWidth + 'px;position: Absolute;height:' + height + 'px;display:' + display + ';" data-bgImg="' + src + '"></span></a>');
} else {
sliderContent.append('<span style=\"background-image: url(' + src + '); width: ' + bodyWidth + 'px;position: Absolute;height:' + height + 'px;display:' + display + ';" data-bgImg="' + src + '"></span>');
}
controlNav.append('<a class="nivo-control ' + active + '" rel="' + i + '">' + i + '</a>');
variables.total++;
});
dataDiv.hide(); //加载前事件
settings.afterLoad();
slider.append(btnContent);
slider.append(sliderContent);
slider.append(controlNav); $(window).resize(function () {
var width = $("body").width();
slider.children('.nav-main').width(width);
sliderContent.find("span:eq(" + variables.currentIndex + ")").css({ width: width });
}); initEvent();
var timer = 0;
if (images.length > 1 && settings.autoStart) {
initTime();
} var toNext = function () {
if (variables.nextIndex < 0) {
variables.nextIndex = variables.total - 1;
settings.lastSlide();
} else if (variables.nextIndex > variables.total - 1) {
variables.nextIndex = 0;
settings.lastSlide();
}
var nextImg = sliderContent.find("span:eq(" + variables.nextIndex + ")");
var currentImg = sliderContent.find("span:eq(" + variables.currentIndex + ")"); sliderContent.find("span:eq(" + variables.nextIndex + ")").css({ height: variables.imgHeight, position: 'absolute', width: $("body").width(), top: 0, 'z-index': 4 }); currentImg.stop(true, true);
nextImg.stop(true, true); //淡入淡出效果
currentImg.fadeOut(settings.animateTime);
nextImg.fadeIn(settings.animateTime, settings.slideshowEnd);
controlNav.find("a").removeClass("active");
controlNav.find("a:eq(" + variables.nextIndex + ")").addClass("active");
variables.currentIndex = variables.nextIndex;
}; //开始切换
var switchStart = function (operator) {
stop();
if (operator == "+") {
variables.nextIndex = variables.currentIndex + 1;
} else if (operator == "-") {
variables.nextIndex = variables.currentIndex - 1;
}
toNext();
} function initEvent() {
//小点
$(".nivo-control", slider).mouseover(function () {
var index = parseInt($(this).attr("rel"));
variables.nextIndex = index;
switchStart("");
}).mouseout(function () {
initTime(variables.operation);
}); //图片
$("span", sliderContent).mouseout(function () {
initTime(variables.operation);
}).mouseover(function () {
stop();
}); //上一张,下一张
$(".nivo-NextContent a", slider).click(function () {
variables.operation = $(this).attr("data-opt");
settings.autoStart = true;
switchStart(variables.operation);
}).mouseout(function () {
initTime(variables.operation);
});
} function initTime(operator) {
if (variables.paused && settings.autoStart){
timer = setInterval(function () {
if (operator == "-") {
variables.nextIndex--;
} else {
variables.nextIndex++;
}
toNext();
}, settings.pauseTime);
variables.paused = false;
}
} var stop = function () {
clearInterval(timer);
variables.paused = true;
}; return this;
}; $.fn.switchImg = function (options) {
return this.each(function () {
var element = $(this);
if (element.data('data-switch')) return element.data('data-switch');
var switchObj = new mySlider(this, options);
element.data('data-switch', switchObj);
});
}; $.fn.switchImg.defaults = {
pauseTime: 3000, //图片切换间隔时间
animateTime: 2000, //动画完成时间
autoStart: true, //是否自动滚动
slideshowEnd: function () { }, //图片切换完成
lastSlide: function () { }, //切换到最后一张图片
afterLoad: function () { } //插件加载完成
}; })(jQuery);
调用的时候有几点需要注意的
- 切换横幅插件数据源 必须安装下面的结构书写。
- 如果想给生成的横幅添加超链接,必须在 img 元素里添加 data-link 属性并指定链接地址。
- 如果在 在 img 元素里添加 height 属性,生成的横幅高度以 height 值为准,否则以第一个图片高度为准。
<div id="slider" class="nivoSlider">
<div>
<img src="../images/2_02.png" height="399" alt="" />
<img src="../images/22.png" alt="" />
<img src="../images/33.png" alt="" data-link="http://www.baidu.com" />
<img src="../images/1.jpg" alt="" />
</div>
</div>
- 页面调用示例:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title> <script src="../Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="../Scripts/switch/switch.js"></script>
<link href="../Scripts/switch/default/default.css" rel="stylesheet" />
<style type="text/css">
.body {
width: 961px;
margin: auto;
}
</style> <script type="text/javascript">
$(function () {
$("#slider").switchImg({
pauseTime: 3000, //图片切换间隔时间
animateTime: 2000, //动画完成时间
autoStart: false, //是否自动切换
afterLoad: function () {
//alert("开始加载");
},
slideshowEnd: function () {//图片切换效果完成
//alert("切换完成");
},
lastSlide: function () {
//alert("切换到最后一张");
}
});
})
</script>
</head>
<body> <div id="slider" class="nivoSlider">
<div>
<img src="../images/2_02.png" height="399" alt="" />
<img src="../images/22.png" alt="" />
<img src="../images/33.png" alt="" data-link="http://www.baidu.com" />
<img src="../images/1.jpg" alt="" />
</div> </div> </body>
</html>
- 插件样式
body {
padding:;
margin:;
} .nivoSlider {
position: relative;
} .nivo-main {
position: relative;
height: 399px;
} .nivo-main span {
background-position: center top;
display: inline-block;
} .nivoSlider .nivo-prevNav, .nivoSlider .nivo-nextNav {
cursor: pointer;
} .nivoSlider .nivo-controlNav {
padding:;
position: relative;
text-align: center;
top: -50px;
z-index:;
} .nivoSlider .nivo-controlNav .nivo-control {
background: url("bullets.png") no-repeat scroll 0 0 transparent;
border: 0 none;
display: inline-block;
height: 22px;
margin: 0 2px;
text-indent: -9999px;
width: 22px;
} .nivoSlider .nivo-controlNav .active {
background: url("bullets.png") no-repeat scroll 0 -22px transparent;
} .nivoSlider .nivo-NextContent {
position: relative;
top: 190px;
} .nivoSlider .nivo-NextContent a {
background: url("arrows.png") no-repeat scroll 0 0 transparent;
border: 0 none;
display: block;
height: 30px;
text-indent: -9999px;
width: 30px;
cursor: pointer;
position: absolute;
z-index:;
} .nivoSlider a.nivo-nextNav {
background-position: 100% 50%;
right: 20px;
float: left;
} .nivoSlider a.nivo-prevNav {
background-position: 0 50%;
left: auto;
float: right;
left: 20px;
}
为了方便大家使用,我把源码打包放到云盘上,欢迎大家 下载试用
网站横幅切换jquery 插件的更多相关文章
- 网站开发常用jQuery插件总结(12)固定元素插件scrolltofixed
这个插件在前段时间用过一次,当时是改一个网站.要求顶部的菜单栏随着滚动条的滚动而固定.也大体写了一下,不过在文章中也只是提了一下,文章地址:jQuery插件固定元素位置. 在这篇文章中,再进行总结一下 ...
- 网站开发常用jQuery插件总结(五)滚动条插件nanoscroller
网站在展示信息时,如果信息量过大,解决方法主要有三种.1.分页,将信息分页显示.2.整页显示,但是页面过长,影响浏览体验.3.使用滚动条,而默认滚动条样式太单一,用户体验不友好.所以我们需要美化滚动条 ...
- 网站开发常用jQuery插件总结(三)拖拽插件gridster
1.gridster插件功能 实现类似于win8 磁贴拖拽的功能 2.gridster官方地址 http://gridster.net/ 在官方的网站上也有插件的帮助和实例,但是按照官方的说明,我在本 ...
- 网站建设常用JQuery插件整理
1.jQuery.lazyload 作用:延迟加载网站图片,常用于电商网站.图片展示网站,对于提高网站打开速度比较有效. 2.Owl Carousel 作用:图片滚动特效.响应式传送带插件,特点是支持 ...
- 网站开发常用jQuery插件总结(11)折叠插件Akordeon
实现折叠菜单,可以完全不使用插件.如果使用jquery的话,实现起来也比较简单,我们只需要定义折叠菜单的样式,然后使用jquery中的渐隐渐现就可以了.如果我们自己写折叠菜单,可以方便的使用我们自己的 ...
- 网站开发常用jQuery插件总结(七)背景插件backstretch
一.backstretch插件功能 优化网站外观.主要用于设置页面背景图片,也可以设置html元素的背景图片.背景图片可以设置多张,在间隔时间内循环显示. 注 但是在设置背景图片时,如果图片过大,网站 ...
- 网站开发常用jQuery插件总结(十)菜单插件superfish
网站对于菜单的依赖其实并不是很大,我们完全可以不使用菜单来设计网站,显示网站内容.但是如果网站的分类太多,“也许”使用菜单作为网站导航可以使 用户 更方便的寻找内容.superfish插件就是用于实现 ...
- 网站开发常用jQuery插件总结(八)标签编辑插件Tagit
一.Tagit插件功能 提高网站交互性,增加用户体验.至于其它的功能,还真没有.用一个input text就可以替换了它.但是text没有输入提示功能,而tagit拥有这个功能.官方示例如下图: 将关 ...
- 网站开发常用jQuery插件总结(六)关键词说明插件cluetip
我们开发的网站,总有它一定的用途.如企业站用来宣传企业或展示产品,技术站用来分享自己的思路和经验.既然网站有了它的用途,那么就拥有了它本身的关键词(关键词说明网站的主要内容).例如企业站的关键词大部分 ...
随机推荐
- Eclipse 中设置JVM 内存
Eclipse 中设置JVM 内存 今天在eclipse 中测试把文档转换为图片的时候,报出了下面的错误: java.lang.OutOfMemoryError: Java heap space 从上 ...
- Java基础——Servlet(六)分页相关
前面写了Servlet(一)到(五),主要是在网上搜罗的视频.对分页这块还是不太清楚.于是有找到一些视频,重新学习了一下.主要是对分页的认识和设计思路.也是为了方便我以后回忆一下.. 一.分页常识 p ...
- MyBatis动态添加—trim标签
做添加时,部分字段有值,没值的字段不添加,这就是动态添加,使用 trim 标签就可以实现. <insert id="insertSysUser" parameterType= ...
- Romantic(hdu2699+欧几里德)
Romantic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 杀人游戏(hdu2211)插入法
杀人游戏 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Ubuntu下自定义调整CPU工作频率(用于省电或提高性能都好用)
昨天高铁上拿T480切win10系统看电影,为了节电给细调了个省电策略(设置CPU性能30%),不知是不是因为这个原因,今天切回Ubuntu1604工作导致CPU工作频率非常低. 查阅了一下相关方法, ...
- CSS实现英文或拼音单词首字母大写
CSS实现英文或拼音单词首字母大写,只需要在css样式中加入: text-transform: capitalize 即可. 测试代码如下: <!doctype html> <htm ...
- NodeJS配置TaoBao源
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)
基于python实现的http+json协议接口自动化测试框架(实用改进版) by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 目录 1. ...
- Flutter之搜索电影
搜索使用的是豆瓣电影API https://developers.douban.com/wiki/?title=movie_v2#subject 效果 代码: https://github.com/z ...