最近做一个web项目,站点首页需要像 百度统计 页面类似的切换横幅,有兴趣的可以先看看它的效果,这样就比较容易理解为什么我单独做个插件。其实类似的 jquery 插件网上类似的多的去了,随便网上下了两做了个demo 演示一下,效果不错吗!:) 我是在全屏的状态下看的,效果还行,当把屏幕切小之后问题就出来了,屏幕小了之后图片的后面部分显示不出来了,本来的效果应该是如果屏幕小了应该把图片两 边不重要的部分隐藏掉,但是由于网上的插件都是直接生成的 img 元素,我的网站页面body元素固定宽度,居中的,所以出现前面说的问题。

怎么办呢,本来想在别的插件基础上改一下,后来看改动比较多,干脆自己写个算了,以后用起来也方便。

我的思路是,首先要实现上面的效果不用 img 元素, 我选择了用 span 元素 给它添加背景图片,显示方式为 inline-block,这样比较容易。

由于需要切换 span 定位方式为绝对定位,外面包一层 div容器 定位方式为 relative 这样在切换的时候只要把要显示的 span 设置为 display: block; ,其余的全部设置为 display: none; 切换就解决了。

然后就是通用性问题,给插件留下灵活的配置项跟事件接口。想了想大概就需要几项吧。

  • 设置项
  1. 图片切换间隔时间
  2. 动画完成时间
  3. 是否自动切换
  • 事件接口
  1. 图片切换完成事件
  2. 切换到最后一张图片
  3. 插件加载完成

思路理清了,下面奉上插件代码:

 /*
* 横幅切换插件
* 作者: 封浩
* 创建日期: 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);

调用的时候有几点需要注意的

  1. 切换横幅插件数据源 必须安装下面的结构书写。
  2. 如果想给生成的横幅添加超链接,必须在 img 元素里添加 data-link 属性并指定链接地址。
  3. 如果在 在 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 插件的更多相关文章

  1. 网站开发常用jQuery插件总结(12)固定元素插件scrolltofixed

    这个插件在前段时间用过一次,当时是改一个网站.要求顶部的菜单栏随着滚动条的滚动而固定.也大体写了一下,不过在文章中也只是提了一下,文章地址:jQuery插件固定元素位置. 在这篇文章中,再进行总结一下 ...

  2. 网站开发常用jQuery插件总结(五)滚动条插件nanoscroller

    网站在展示信息时,如果信息量过大,解决方法主要有三种.1.分页,将信息分页显示.2.整页显示,但是页面过长,影响浏览体验.3.使用滚动条,而默认滚动条样式太单一,用户体验不友好.所以我们需要美化滚动条 ...

  3. 网站开发常用jQuery插件总结(三)拖拽插件gridster

    1.gridster插件功能 实现类似于win8 磁贴拖拽的功能 2.gridster官方地址 http://gridster.net/ 在官方的网站上也有插件的帮助和实例,但是按照官方的说明,我在本 ...

  4. 网站建设常用JQuery插件整理

    1.jQuery.lazyload 作用:延迟加载网站图片,常用于电商网站.图片展示网站,对于提高网站打开速度比较有效. 2.Owl Carousel 作用:图片滚动特效.响应式传送带插件,特点是支持 ...

  5. 网站开发常用jQuery插件总结(11)折叠插件Akordeon

    实现折叠菜单,可以完全不使用插件.如果使用jquery的话,实现起来也比较简单,我们只需要定义折叠菜单的样式,然后使用jquery中的渐隐渐现就可以了.如果我们自己写折叠菜单,可以方便的使用我们自己的 ...

  6. 网站开发常用jQuery插件总结(七)背景插件backstretch

    一.backstretch插件功能 优化网站外观.主要用于设置页面背景图片,也可以设置html元素的背景图片.背景图片可以设置多张,在间隔时间内循环显示. 注 但是在设置背景图片时,如果图片过大,网站 ...

  7. 网站开发常用jQuery插件总结(十)菜单插件superfish

    网站对于菜单的依赖其实并不是很大,我们完全可以不使用菜单来设计网站,显示网站内容.但是如果网站的分类太多,“也许”使用菜单作为网站导航可以使 用户 更方便的寻找内容.superfish插件就是用于实现 ...

  8. 网站开发常用jQuery插件总结(八)标签编辑插件Tagit

    一.Tagit插件功能 提高网站交互性,增加用户体验.至于其它的功能,还真没有.用一个input text就可以替换了它.但是text没有输入提示功能,而tagit拥有这个功能.官方示例如下图: 将关 ...

  9. 网站开发常用jQuery插件总结(六)关键词说明插件cluetip

    我们开发的网站,总有它一定的用途.如企业站用来宣传企业或展示产品,技术站用来分享自己的思路和经验.既然网站有了它的用途,那么就拥有了它本身的关键词(关键词说明网站的主要内容).例如企业站的关键词大部分 ...

随机推荐

  1. [日常] Go语言圣经-示例: 并发的目录遍历习题

    练习 8.9: 编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来. package main import ( // "filepath" "fla ...

  2. 乐字节-Java8新特性之方法引用

    上一篇小乐介绍了<Java8新特性-函数式接口>,大家可以点击回顾.这篇文章将接着介绍Java8新特性之方法引用. Java8 中引入方法引用新特性,用于简化应用对象方法的调用, 方法引用 ...

  3. Elasticsearch Query DSL 整理总结(二)—— 要搞懂 Match Query,看这篇就够了

    目录 引言 构建示例 match operator 参数 analyzer lenient 参数 Fuzziness fuzzniess 参数 什么是模糊搜索? Levenshtein Edit Di ...

  4. 【JavaFx教程】第一部分:Scene Builder

    第一部分的主题 开始了解 JavaFX . 创建并运行一个 JavaFX 项目. 使用 Scene Builder 来设计用户界面. 使用 模型 - 视图 - 控制器(MVC)模式 构造基础的应用. ...

  5. Android8自定义广播无法收到消息

    在Android 8之前,如果要发送自定义的静态广播,做好其他配置后,只需实例化一个Intent对象intent,然后将其作为参数传入sendBroadcast()方法中即可,例如 Intent in ...

  6. BZOJ3884(SummerTrainingDay04-C 欧拉定理)

    上帝与集合的正确用法 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天,  上帝创造了一个世界的基本元素,称做“元”. 第二天,  上帝创造了一个新的元素,称作“α”.“α”被定义为“元 ...

  7. cmd--登录mysql

    cmd,Windows 命令提示符(cmd.exe)是 Windows NT 下的一个用于运行 Windows 控制面板程序或某些 DOS 程序的shell程序:或在 Windows CE 下只用于运 ...

  8. ConcurrentDictionary的用法

    private static ConcurrentDictionary<Guid, string> dictDbNames = new ConcurrentDictionary<Gu ...

  9. 一文读懂商业智能(BI):企业数据分析的中枢

    商业智能(BI)大家可能早已耳熟能详.从早期的报表自动化,到现在的复杂灵活分析,多平台支持,优秀的人机互动,多数据抽取,大数据整合,甚至和当下最火的人工智能都有结合点.可能一提到BI,大家都会自然而然 ...

  10. CSS样式----css样式表和选择器(图文详解)

    本文最初于2015-10-03发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 本文主要内容 CSS概述 CSS和HTML结合的三种方式:行内样 ...