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

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. [汇编学习笔记][第五章[BX]和loop指令]

    第五章[BX]和loop指令 前言 定义描述性符号“()”来表示一个寄存器或一个内存单元的内容,比如: (ax)表示ax中的内容,(al)表示al的内容. 约定符号ideta表示常量. 5.1 [BX ...

  2. mysql免安装版配置与使用方法

    mysql免安装版配置与使用方法      以mysql-noinstall-5.1.6(win32)为例 1>把压缩文件mysql-noinstall-5.1.6-alpha-win32.zi ...

  3. 文本框脚本 - select 事件

    HTML中,用两种方式来表示文本框: input 单行文本.textarea 多行文本 那么在文本中存在哪些事件尼? 1    select 都支持 但是其触发的时机不一样 IE9+ .Safair ...

  4. SQL Server无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法

    用windows验证方式进入Management Studio, 安全性 > 用户名 > 右击sa > 属性 > 把默认数据库选“master”

  5. 自定义UIView动画效果

    最普通动画: //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UIView setAnimationDuration:]; / ...

  6. (原)不明白JNI指针调用顺序

    很不明白JNI里面获取指针的顺序(可能这样描述不太恰当吧). 下面按照传入指针的顺序的代码一跑就崩溃.如下: JNIEXPORT jint JNICALL Java_com_example_X_XX_ ...

  7. css使用技巧

    1) 网站上经常会出现用户输入一大段字符和字母以至于文字无法正常折行,把版式破坏,这样我们就要参考以下样式:word-wrap:break-word; overflow:hidden; 当然必须得有宽 ...

  8. dedecms 财付通接口

    用织梦做了个旅游网站,网址:http://www.redtourism.cn/ 客户要求财付通支付,上网找了下 不是要买就是要钱,只有自己写了. 代码: <?phpif(!defined('DE ...

  9. Spring boot 提高篇

    Spring boot 提高篇 上篇文章介绍了Spring boot初级教程:构建微服务:Spring boot 入门篇,方便大家快速入门.了解实践Spring boot特性:本篇文章接着上篇内容继续 ...

  10. Android应用开发中Intent的作用及使用方法

    Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意 ...