分享一个自己写的基于JQuery的一个Web背景切换的Demo
这个效果主要有两个特点:
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的更多相关文章
- 基于jQuery扁平多颜色选项卡切换代码
基于jQuery扁平多颜色选项卡切换代码,支持自动轮播切换,鼠标滑过切换的jQuery特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- 基于jQuery图片遮罩滑动文字切换特效
基于jQuery图片遮罩滑动文字切换特效.这是一款jquery hover鼠标滑动选项卡切换透明背景遮罩文字显示特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div ...
- 基于jQuery左侧大图右侧小图切换代码
基于jQuery左侧大图右侧小图切换代码是一款带右侧缩略图选项卡的jQuery图片切换特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- 一款基于jquery超炫的图片切换特效
今天为给大家介绍一款基于jquery超炫的图片切换特效.由百叶窗飞入显示图片.图片消息的时候也是百叶窗渐行渐远.用于图片展示,效果还是非常好,我们一起看下效果图: 在线预览 源码下载 来看下实现的 ...
- 基于jQuery的自适应图片左右切换
效果预览:http://hovertree.com/code/jquery/smjv6d0n.htm 基于jQuery编写的横向自适应幻灯片切换特效 全屏自适应jquery焦点图切换特效,在IE6这个 ...
- 基于jQuery环形图标菜单旋转切换特效
分享一款基于jQuery环形图标旋转切换特效.这是一款鼠标点击图标菜单圆形顺时针或者逆时针旋转切换代码.效果图如下: 在线预览 源码下载 实现的代码. js代码: /* 图片地址可以是相对路径或绝 ...
- 分享一个以前写的基于C#语言操作数据库的小框架
一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...
- 分享一个自己写的基于canvas的原生js图片爆炸插件
DEMO访问地址: https://bupt-hjm.github.io/BoomGo/博客地址: http://bupt-hjm.github.io/2016/07/10/boom/插件及使用方法地 ...
- 分享一个自己写的基于TP的关系模型
为了说明问题,假设现在有表test1,test1有从表test2:test1属于test3,test1和test4多对多,关联表test1_test4. 1.定义关系 class Test1Model ...
随机推荐
- Oracle监听静态注册和动态注册
静态注册和动态注册总结 一.什么是注册? 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名 ...
- T-SQL和PL/SQL 区别
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库 ...
- C#枚举器接口IEnumerator的实现
原文(http://blog.csdn.net/phpxin123/article/details/7897226) 在C#中,如果一个类要使用foreach结构来实现迭代,就必须实现IEnumera ...
- asp.net断点续传技术---下载(转)
断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种.请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求 ...
- 提示框的优化之自定义Toast组件之(二)Toast组件的业务逻辑实现
在java下org.socrates.mydiary.activity下LoginActivity下自定义一个方法showCustomerToast() public class LoginAct ...
- SQLSERVER执行时间统计工具SQLQueryStress
有时候需要检测一下SQL语句的执行时间,相信大家都会用SET STATISTICS TIME ON开关打开SQLSERVER内置的时间统计 SET STATISTICS TIME ON 不过这款小工具 ...
- flex 调用WebService1(基于.net)
以.net平台下C#语言开发的WebService为web服务,使用flex actionscript语句访问webservice接口 Flex: Temp.mxml部分代码 //调用WebSer ...
- 拥有iframe页面的子父类窗口调用JS的方法,并且注意的事项
一.前言 我页面用的是EasyUI的弹出窗口里面嵌入一个iframe.第一:父窗口打开子窗口是一个新增用户信息的iframe子页面,点击保存后,子窗口iframe则去调用父窗口的function cl ...
- Ubuntu14.04上安装tftpd服务
首先sudo apt-get install tftpd-hpa, tftp-hpa 然后sudo vim /etc/default/tftpd-hpa 配置文件如下 TFTP_USERNAME=& ...
- Windows I/O模型之一:Select模型
1.概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock) 四种调用模式: 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果 ...