这个效果主要有两个特点:

1. 背景切换的渐变

2. 背景大小自适应

3. 背景自适应保持比例同时, 相对居中

js源码:

(function ($) {
$.fn.bgChange = function (options) {
var defaults = {
width: 1920,
height: 1080,
changeRate: 3000,
isLoadLimit: false,
loadLimit: 10000,
changed: function () { },
top: 0,
loaded: function () { }
};
var opts = $.extend(defaults, options); var event = {
loaded: opts.loaded,
picsLoaded: picsLoaded,
changed: opts.changed
}; var picHolder = $(this);
var pics = $(picHolder).find('.bgpic img'); $(pics).attr('status', 'ready'); var vl = {
index: 0,
wWidth: 0,
wHeigth: 0,
rate: opts.width / opts.height,
total: pics.length,
predex: -1,
loadCount: 0,
timer: null,
lock: false,
isLoaded: false
}; var obj = {
start: start,
pause: pause,
next: next,
pre: pre,
total: vl.total
}; function start() {
if (vl.isLoaded) {
if (vl.timer == null) {
vl.timer = setInterval(changePic, opts.changeRate);
}
}
} function pause() {
if (vl.isLoaded) {
if (vl.timer != null) {
clearInterval(vl.timer);
vl.timer = null;
}
}
} function next() {
if (vl.isLoaded) {
pause();
if (!vl.lock) {
var indexT = vl.index;
if (vl.predex >= 0 && vl.predex < vl.total) {
$(pics).eq(vl.predex).css('z-index', 1).stop(false, false).fadeOut(500, function () {
$(this).css('z-index', 0);
vl.lock = false;
});
$(pics).eq(indexT).stop(false, false).show();
}
event.changed({ index: indexT, total: vl.total });
vl.predex = vl.index;
vl.index = vl.index < (vl.total - 1) ? vl.index + 1 : 0; start();
}
vl.lock = true;
}
} function pre() {
if (vl.isLoaded) {
pause();
if (!vl.lock) {
var indexT = (vl.index - 2) >= 0 ? (vl.index - 2) : (vl.total + vl.index - 2);
if (vl.predex >= 0 && vl.predex < vl.total) {
$(pics).eq(vl.predex).css('z-index', 1).stop(false, false).fadeOut(500, function () {
$(this).css('z-index', 0);
vl.lock = false;
});
$(pics).eq(indexT).stop(false, false).show();
}
event.changed({ index: indexT, total: vl.total });
vl.predex = indexT;
vl.index = indexT < (vl.total - 1) ? indexT + 1 : 0; start();
}
vl.lock = true;
}
} function setSize() {
vl.wWidth = $(window).width();
vl.wHeight = $(window).height() - opts.top;
var nWidth = 0;
var nHeight = 0;
if (vl.rate > vl.wWidth / vl.wHeight) {
nWidth = vl.wHeight * vl.rate;
nHeight = vl.wHeight;
setPicSize(pics, 'auto', vl.wHeight);
} else {
nWidth = vl.wWidth;
nHeight = vl.wWidth / vl.rate;
setPicSize(pics, vl.wWidth, 'auto');
}
//$(picHolder).css({ 'height': vl.wHeight, 'left': -(nWidth - vl.wWidth) / 2 });
$(picHolder).css({ 'width': vl.wWidth, 'height': vl.wHeight }).find('.bgpic').css({ 'left': -(nWidth - vl.wWidth) / 2, 'top': -(nHeight - vl.wHeight) / 2 });
} function setPicSize(o, w, h) {
$(o).css({ 'width': w, 'height': h });
} $(window).resize(function () {
setSize();
}); setSize(); function changePic() {
var indexT = vl.index;
if (vl.predex >= 0 && vl.predex < vl.total) {
$(pics).eq(vl.predex).css('z-index', 1).stop(false, false).fadeOut(500, function () {
$(this).css('z-index', 0);
}); $(pics).eq(indexT).stop(false, false).show();
} else {
$(pics).eq(indexT).stop(false, false).fadeIn(500);
}
event.changed({ index: indexT, total: vl.total });
vl.predex = vl.index;
vl.index = vl.index < (vl.total - 1) ? vl.index + 1 : 0;
} $(pics).eq(0).show(); $(pics).each(function (i, val) {
$(val).load(function () {
$(val).attr('status', 'loaded');
vl.loadCount++;
if (vl.loadCount == vl.total) {
vl.isLoaded = true;
event.picsLoaded();
}
});
$(val).attr('src', $(val).attr('original'));
}); if (vl.isLoadLimit) {
setTimeout(function () {
if (!vl.isLoaded) {
$(pics).filter("[status='ready']").remove();
pics = $(picHolder).find('.bgpic img');
vl.total = pics.length;
obj.total = vl.total;
event.picsLoaded();
}
}, opts.loadLimit);
} function picsLoaded() {
start();
changePic();
event.loaded();
} return obj;
}
})(jQuery);

css源码:

body
{
padding:;
margin:;
}
#bgpics
{
position: absolute;
width: 100%;
z-index:;
left:;
top:;
overflow: hidden;
}
.bgpic
{
position: relative;
}
#bgpics .bgpic img
{
position: absolute;
display: none;
z-index:;
}

使用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="jquery-1.8.2.min.js" type="text/javascript"></script>
<link href="bgChange.css" rel="stylesheet" type="text/css" />
<script src="bgChange.js" type="text/javascript"></script>
<script>
$(function () {
$('#bgpics').bgChange({changeRate: 1000,loaded: function () { alert('loaded!') }});
});
</script>
</head>
<body>
<div id="bgpics">
<div class="bgpic">
<img original="slide/001.jpg" />
<img original="slide/002.jpg" />
<img original="slide/003.jpg" />
<img original="slide/004.jpg" />
<img original="slide/005.jpg" />
<img original="slide/006.jpg" />
</div>
</div>
</body>
</html>

使用很简单, 同时bgChange()可以传入一些参数, 达到效果的调整, 例如切换速度.

暂时不进行解析和注释, 可能找个时间再补上, 前段时间写的, 逻辑有点遗忘

效果请大家自行下载, 打开htm文件即可.

下载地址: http://yunpan.cn/Q757aP3PS2cqa (提取码:fed4)

分享一个自己写的基于JQuery的一个Web背景切换的Demo的更多相关文章

  1. 基于jQuery扁平多颜色选项卡切换代码

    基于jQuery扁平多颜色选项卡切换代码,支持自动轮播切换,鼠标滑过切换的jQuery特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=" ...

  2. 基于jQuery图片遮罩滑动文字切换特效

    基于jQuery图片遮罩滑动文字切换特效.这是一款jquery hover鼠标滑动选项卡切换透明背景遮罩文字显示特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  3. 基于jQuery左侧大图右侧小图切换代码

    基于jQuery左侧大图右侧小图切换代码是一款带右侧缩略图选项卡的jQuery图片切换特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class=" ...

  4. 一款基于jquery超炫的图片切换特效

    今天为给大家介绍一款基于jquery超炫的图片切换特效.由百叶窗飞入显示图片.图片消息的时候也是百叶窗渐行渐远.用于图片展示,效果还是非常好,我们一起看下效果图: 在线预览   源码下载 来看下实现的 ...

  5. 基于jQuery的自适应图片左右切换

    效果预览:http://hovertree.com/code/jquery/smjv6d0n.htm 基于jQuery编写的横向自适应幻灯片切换特效 全屏自适应jquery焦点图切换特效,在IE6这个 ...

  6. 基于jQuery环形图标菜单旋转切换特效

    分享一款基于jQuery环形图标旋转切换特效.这是一款鼠标点击图标菜单圆形顺时针或者逆时针旋转切换代码.效果图如下: 在线预览   源码下载 实现的代码. js代码: /* 图片地址可以是相对路径或绝 ...

  7. 分享一个以前写的基于C#语言操作数据库的小框架

    一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...

  8. 分享一个自己写的基于canvas的原生js图片爆炸插件

    DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...

  9. 分享一个自己写的基于TP的关系模型

    为了说明问题,假设现在有表test1,test1有从表test2:test1属于test3,test1和test4多对多,关联表test1_test4. 1.定义关系 class Test1Model ...

随机推荐

  1. Python进阶之路---1.1python简介

                            Python简介 Python简介 Python (发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]n.蟒蛇,巨蛇 ),是一种面向对象的解释 ...

  2. EffectiveC#7--选择恒定的原子值类型数据

    1.恒定类型就是一但它们被创建,它们(的值)就是固定的. 恒定类型可以很好的在基于哈希代码的集合上工作.以Object.GetHashCode()方法返回的值,对同一个实例是必须相同的 2.一个客户类 ...

  3. GDI+创建Graphics对象的2种方式

      1.this.CreateGraphics()     // 调用控件的CreateGraphics()方法 2.在OnPaint事件中,PaintEventArgs类型的参数e对象的Graphi ...

  4. javascript 阻止事件冒泡和阻止默认事件对比

    公司项目有像上图中效果的功能需求这也是很常见功能很简单功能,通过一个小例子和大家聊聊js的事件冒泡和默认事件. 先说说一般的实现方式即使用阻止事件冒泡的方式去做,给input绑定一个click事件(并 ...

  5. Window Linux下实现指定目录内文件变更的监控方法

    转自:http://qbaok.blog.163.com/blog/static/10129265201112302014782/ 对于监控指定目录内文件变更,window 系统提供了两个未公开API ...

  6. shell中的退出状态码

    shell中的退出状态码最大只有255,如果超过这个值,就会进行取余运算,即如果执行如下命令: exit exitCode 如果exitCode大于255,那么实际的状态码为exitCode % 25 ...

  7. 利用反射动态构成sql语句

    class Program     {         static void Main(string[] args)         {             People p = new Peo ...

  8. 【HTML5】在head 设置 meta 能更方便开发

    <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initi ...

  9. PROCEDURE_监测系统_原始数据报表数据生成存储过程—求每天平均值插入多表视图

    create or replace procedure proc_generate_report(in_date in varchar2) is  v_retCode varchar2(20);  v ...

  10. python 连接Mysql数据库

    1.下载http://dev.mysql.com/downloads/connector/python/ 由于Python安装的是3.4,所以需要下载下面的mysql-connector-python ...