用了两个晚上,封装了一个js幻灯片的函数(类库?框架?),随你怎么叫。因为自己做网站用到,以前都是用flash壳,麻烦,后来用jquery插件,太大。所以自己动手做了一个,压缩后只有3k。窃以为比较使用,跟大家分享,欢迎各路大牛批评指正。
测试页面在:
http://gf-zj.com/slider/
打包下载地址:
http://gf-zj.com/slider/slider.zip
/**
* i use closure to simulate private method in OOP,because i don't wanna disturb the others js libraris you may use like jQuery,which uses $
* remember the only variable i inject to window is Slider
*
* (c)logan liu
* Email:hellouniverse@qq.com
* if you find bugs,Don't hesitate contacting me.
*/
(function(window){
function Slider(contentID, handlerID, pageNum, onePageWidth, direction, step, speed){
if ((!contentID) || (!handlerID) || (!pageNum) || (!onePageWidth)) {
alert("init error,see your paraments");
}
this.contentID = contentID;
this.handlerID = handlerID;
this.pageNum = pageNum;
this.onePageWidth = onePageWidth;
this.step = step || 10;
this.direction = direction;
this.speed = speed || 1;
}
var $ = function(id){
return document.getElementById(id);
}
var style = function(sid, key, value){
if (value)
$(sid).style[key] = value;
else
return $(sid).style[key];
};
/**
*
* @param {Object} id
* @param {Object} i
* 0-100
*/
var fade = function(id, i){
style(id, "filter", "alpha(opacity=" + i + ")");
i = i / 100;
style(id, "-moz-opacity", i);
style(id, "-khtml-opacity", i);
style(id, "opacity", i);
};
var log = function(){
if (!window.console)
return;
// console.log(arguments.callee.caller.toString());
for (var i in arguments) {
console.log(i + ":" + arguments[i]);
}
}
var addEvent = function(elm, evType, fn, useCapture){
if (elm.addEventListener) {
elm.addEventListener(evType, fn, useCapture);
}
else
if (elm.attachEvent) {
elm.attachEvent('on' + evType, fn);
}
else {
elm['on' + evType] = fn;
}
};
var dump = function(o){
for (var i in o) {
log(i + ":" + o[i]);
}
};
Slider.prototype = {
changeEvent: "onclick",
leftAndRightArrow: false,
pageHandler: true,
currentPage: 0,
transformEffect: "",
intervalId: 0,
duration: 6000,
/**
* anything can case to false stands for horizontal.and the others are vertical.
*/
direction: 0,
/**
* rend page navigator like 1,2...,so you can override it with you method such as page1,page2..or just empty.
* @param {Object} i
*/
rendPageNav: function(i){
return i == -1 || i == this.pageNum ? "" : (i + 1);
},
/**
* set navigator's class when clicked.add "current" to this.currentPage
* @param {Object} i
*/
rendNav: function(j){
var c = $(this.handlerID).children;
j = this.leftAndRightArrow ? (j + 1) : j;
for (var i = (this.leftAndRightArrow ? 1 : 0), l = (this.leftAndRightArrow ? c.length - 1 : c.length); i < l; i++) {
c[i].className = (i == j ? "current" : "");
}
},
initHandler: function(){
var tempThis = this;
for (var i = (this.leftAndRightArrow ? -1 : 0), len = (this.leftAndRightArrow ? this.pageNum + 1 : this.pageNum); i < len; i++) {
if ((!tempThis.pageHandler) && i != -1 && i != tempThis.pageNum)
continue;
var a = document.createElement("a");
a.href = "#nogo";
a.className = (i == -1 ? "left" : (i == 0 ? "current" : (i == this.pageNum ? "right" : "")));
/**
* must use closure here to keep i.
* inspired by:Listing 2-16,page 29,<Pro JavaScript Techniques>,John Resig
*/
(function(){
var tempI = i;
a[tempThis.changeEvent] = function(){
this.blur();
tempThis.toPage(tempI == -1 ? "-1" : (tempI == tempThis.pageNum ? "+1" : tempI));
};
})();
a.innerHTML = tempThis.rendPageNav(i);
$(this.handlerID).appendChild(a);
}
},
toPage: function(toNum){
if (toNum === "+1")
toNum = this.currentPage + 1;
if (toNum === "-1")
toNum = this.currentPage - 1;
if (this.currentPage == toNum)
return;
if (toNum >= this.pageNum)
toNum = toNum % this.pageNum;
if (toNum < 0)
toNum = this.pageNum - 1;
this.rendNav(toNum);
var toPos = -toNum * this.onePageWidth;
var currentPos = -this.currentPage * this.onePageWidth;
this.stopAutoSwitch();
var value = this.direction ? "top" : "left";
this.transformFn(this.contentID, value, currentPos, toPos, this.startAutoSwitch);
//fix some pix
if (style(this.contentID, value) != toPos)
style(this.contentID, value, toPos + "px");
this.currentPage = toNum;
},
/**
* all the transform funcitons must set value(left,top) from x to y.
* i don't care how you transfrom but the start stat and the end stat.
* @param {Object} id
* @param {Object} value
* @param {Object} from
* @param {Object} to
*/
transformFn: function(id, value, from, to, callback){
// log(this.transformEffect,id, value, from, to);
switch (this.transformEffect) {
case "fade":
var tempThis = this;
//fade from 1 to 0 to 1,i change from 1 to 0 to -1
(function fadeEffect(i){
i = i - 5;
if (i == -100) {
fade(id, 100);
callback.call(tempThis);
}
else {
if (i == 0) {
style(id, value, to + "px");
}
fade(id, i >= 0 ? i : -i);
window.setTimeout(function(){
fadeEffect(i);
}, tempThis.speed);
}
})(100);
break;
case "slide":
var neg = (to - from > 0) ? "1" : "-1";
var tempThis = this;
(function slideEffect(toTemp){
style(tempThis.contentID, value, toTemp + "px");
if ((to - toTemp) * neg > 0) {
window.setTimeout(function(){
slideEffect(toTemp + neg * tempThis.step);
}, tempThis.speed);
}
else {
callback.call(tempThis);
}
})(from + neg * tempThis.step);
break;
default:
style(id, value, to + "px");
callback();
break;
}
},
winonload: function(duration){
style(this.contentID, "position", "absolute");
this.initHandler();
this.startAutoSwitch();
return {};//it's necessary for IE6
},
startAutoSwitch: function(){
if (this.duration > 0) {
var tempThis = this;
this.intervalId = window.setInterval(function(){
tempThis.toPage(tempThis.currentPage + 1)
}, tempThis.duration);
}
},
stopAutoSwitch: function(){
if (this.intervalId)
window.clearInterval(this.intervalId);
},
start: function(duration, transformEffect){
this.duration = duration || 3000;
this.transformEffect = transformEffect || "slide";
addEvent(window, 'load', this.winonload(), false);
}
};
window.Slider = Slider;
})(window)
分享到:
相关推荐
用了两个晚上,封装了一个js幻灯片的函数(类库?框架?),随你怎么叫。因为自己做网站用到,以前都是用flash壳,麻烦,后来用jquery插件,太大。所以自己动手做了一个,压缩后只有3k。窃以为比较使用,跟大家分享,...
本资源提供的"JS幻灯片源代码"是一个利用JavaScript实现的幻灯片展示系统,适用于网站中产品展示、图片轮播或信息滑动效果。 首先,`readme.htm`通常是项目中的说明文档,它可能包含了如何使用这个幻灯片源代码的...
JavaScript幻灯片是一种常见的网页动态效果,用于展示一系列图片、文本或其他内容,通过滑动或自动切换的方式增强用户体验。在创建一个兼容各种浏览器的JavaScript幻灯片时,我们需要考虑的关键知识点包括DOM操作、...
JavaScript幻灯片是一种常见的网页动态效果,用于展示一系列图片、文本或其他内容,通常在网站的首页或产品展示区域被广泛使用。它通过JavaScript库或框架实现,为用户提供了一种交互式的浏览体验,允许用户手动切换...
在这个“js幻灯片效果”中,我们将探讨如何使用JavaScript来创建引人注目的幻灯片展示。 幻灯片效果是网站设计中常见的元素,可以用来展示产品图片、新闻更新或者任何其他需要连续滚动的内容。通过JavaScript,我们...
网站的首页常常会使用到js幻灯片代码来创建动态的、吸引人的内容展示区域,这种技术也被称为轮播图或者滑动展示。本压缩包“网站首页js幻灯片代码.rar”提供了一套完整的JavaScript幻灯片解决方案,适用于增强用户...
JavaScript 幻灯片是一种网页动态效果,用于展示一系列图片、文本或其他内容,通常在网站的首页或产品展示区域被广泛使用。它通过JavaScript库或框架实现,为用户提供一种交互式的浏览体验,无需用户手动翻页,而是...
在本案例中,"js幻灯片切换"是一个使用JavaScript编写的插件,用于实现网页上的图片或内容幻灯片效果,即自动滚动或切换缩略图展示。这种效果常见于网站的首页,可以吸引用户的注意力,展示多份信息而无需占据大量...
在本资源中,虽然没有明确的Flash文件,但"js广告 幻灯片 flash广告"这一标签表明这些JavaScript幻灯片可能受到了Flash的启发,具有类似的动态效果。比如,它们可能包含平滑的过渡效果、自定义动画和声音效果,以...
良好的幻灯片组件应该提供丰富的配置选项,让用户可以根据自己的需求调整样式、动画效果、过渡时间等参数。 10. **插件选择**: 有许多成熟的JS幻灯片插件可供选择,如Bootstrap Carousel、Slick Slider、Swiper...
标题中的“幻灯片JS代码”指的是使用JavaScript编程语言实现的网页动态幻灯片功能。在网页设计中,幻灯片通常用于展示一系列图片、文本或其他内容,通过自动或手动切换来达到动态展示的效果,提升用户体验。...
在本教程中,我们将探讨如何使用JS实现一个基本的幻灯片展示,这是一个常见的网页功能,可以优雅地切换多个图像或内容。我们将利用HTML5和CSS3来辅助实现这一效果。 首先,我们需要创建HTML结构。幻灯片通常包含一...
这可能涉及使用媒体查询(`@media`)和JavaScript来动态调整幻灯片的布局和尺寸。 8. **优化性能**:为了提高性能,可以使用`requestAnimationFrame`来平滑动画效果,并避免不必要的DOM操作。此外,如果幻灯片数量...
"js幻灯片 左右上下滚动"指的是通过JavaScript实现的幻灯片组件,它支持不仅横向(左右)滚动,还支持纵向(上下)滚动。 创建这样的幻灯片,主要涉及以下几个关键知识点: 1. **DOM操作**:JavaScript提供了操作...
在网页设计中,JavaScript(JS)常常被用来创建动态、交互性强的用户体验,其中幻灯片效果就是一个典型的例子。"一个不错的JS幻灯片网页特效"这个标题表明我们将探讨一种利用JavaScript实现的幻灯片展示功能,它能够...
JavaScript幻灯片广告是一种常见的网页动态展示形式,它利用JavaScript编程语言实现图片或内容的滑动切换效果,类似于PowerPoint中的幻灯片演示。这种广告形式可以吸引用户的注意力,提高用户体验,同时展示多张图片...
在本案例中,"js原生幻灯片"指的是使用纯JavaScript编写的一个图片轮播功能,它没有依赖任何外部库如jQuery或React,而是完全基于JavaScript的原生API实现。幻灯片效果是网页设计中常见的元素,通常用于展示一组图片...
通过分析和修改这些代码,你可以根据自己的需求定制个性化的幻灯片效果。 总之,创建一个漂亮的jQuery幻灯片效果需要理解HTML结构、CSS样式以及jQuery的基本用法。通过结合这些技术,我们可以构建出具有吸引力且...
jQuery是JavaScript的一个库,它简化了DOM操作、事件处理和动画效果,因此在创建幻灯片时经常被使用。HTML则提供了页面结构,与JavaScript和jQuery结合实现动态交互。 在这个"js图片幻灯片 jquery幻灯片图片 html...