JavaScript实现图片滑动切换的代码示例分享


Posted in Javascript onMarch 06, 2016

假设我们这里有1到5五张bmp图片,那么控制图片切换显示的核心代码可以为:

<script>
 var i=1;
 var img = new Array();
 img[0] = "1.bmp";
 img[1] = "2.bmp";
 img[2] = "3.bmp";
 img[3] = "4.bmp";
 img[4] = "5.bmp";
 function playImg(){
 i=i+1;
 var imgs = document.getElementById("img");
 imgs.src =img[i];
 if(i>=4){
 i=1;
 }
 }
 window.onload = function(){
 document.getElementById("img").src="1.bmp";
 }
</script>
<img id="img" src="" width="500" hieght="500" onclick="playImg()" style="cursor:pointer;">

主要体现了一个图片的切换控制思路,可以用于各种场景,那么下面我们来看一个复杂一些的实现,能够控制滑动和停顿事件等具体的实现图片的滑动切换效果的例子:

var $$ = function (id) {
return "string" == typeof id ? document.getElementById(id) : id;
};
var Extend = function(destination, source) {
for (var property in source) {
 destination[property] = source[property];
}
return destination;
}
var CurrentStyle = function(element){
return element.currentStyle || document.defaultView.getComputedStyle(element, null);
}
var Bind = function(object, fun) {
var args = Array.prototype.slice.call(arguments).slice(2);
return function() {
 return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
var forEach = function(array, callback, thisObject){
if(array.forEach){
 array.forEach(callback, thisObject);
}else{
 for (var i = 0, len = array.length; i < len; i++) { callback.call(thisObject, array[i], i, array); }
}
}
var Tween = {
Quart: {
 easeOut: function(t,b,c,d){
 return -c * ((t=t/d-1)*t*t*t - 1) + b;
 }
},
Back: {
 easeOut: function(t,b,c,d,s){
 if (s == undefined) s = 1.70158;
 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
 }
},
Bounce: {
 easeOut: function(t,b,c,d){
 if ((t/=d) < (1/2.75)) {
 return c*(7.5625*t*t) + b;
 } else if (t < (2/2.75)) {
 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
 } else if (t < (2.5/2.75)) {
 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
 } else {
 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
 }
 }
}
}

//容器对象,滑动对象,切换数量
var SlideTrans = function(container, slider, count, options) {
this._slider =
(slider);this.container=
(container);//容器对象
this._timer = null;//定时器
this._count = Math.abs(count);//切换数量
this._target = 0;//目标值
this._t = this._b = this._c = 0;//tween参数

this.Index = 0;//当前索引

this.SetOptions(options);

this.Auto = !!this.options.Auto;
this.Duration = Math.abs(this.options.Duration);
this.Time = Math.abs(this.options.Time);
this.Pause = Math.abs(this.options.Pause);
this.Tween = this.options.Tween;
this.onStart = this.options.onStart;
this.onFinish = this.options.onFinish;

var bVertical = !!this.options.Vertical;
this._css = bVertical ? "top" : "left";//方向

//样式设置
var p = CurrentStyle(this._container).position;
p == "relative" || p == "absolute" || (this._container.style.position = "relative");
this._container.style.overflow = "hidden";
this._slider.style.position = "absolute";

this.Change = this.options.Change ? this.options.Change :
 this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;
};
SlideTrans.prototype = {
 //设置默认属性
 SetOptions: function(options) {
this.options = {//默认值
 Vertical: true,//是否垂直方向(方向不能改)
 Auto: true,//是否自动
 Change: 0,//改变量
 Duration: 30,//滑动持续时间
 Time: 10,//滑动延时
 Pause: 3000,//停顿时间(Auto为true时有效)
 onStart: function(){},//开始转换时执行
 onFinish: function(){},//完成转换时执行
 Tween: Tween.Quart.easeOut//tween算子
};
Extend(this.options, options || {});
 },
 //开始切换
 Run: function(index) {
//修正index
index == undefined && (index = this.Index);
index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);
//设置参数
this._target = -Math.abs(this.Change) * (this.Index = index);
this._t = 0;
this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);
this._c = this._target - this._b;

this.onStart();
this.Move();
 },
 //移动
 Move: function() {
clearTimeout(this._timer);
//未到达目标继续移动否则进行下一次滑动
if (this._c && this._t < this.Duration) {
 this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));
 this._timer = setTimeout(Bind(this, this.Move), this.Time);
}else{
 this.MoveTo(this._target);
 this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));
}
 },
 //移动到
 MoveTo: function(i) {
this._slider.style[this._css] = i + "px";
 },
 //下一个
 Next: function() {
this.Run(++this.Index);
 },
 //上一个
 Previous: function() {
this.Run(--this.Index);
 },
 //停止
 Stop: function() {
clearTimeout(this._timer); this.MoveTo(this._target);
 }
};
Javascript 相关文章推荐
JQuery 文本框使用小结
May 22 Javascript
表单元素的submit()方法和onsubmit事件应用概述
Feb 01 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
May 08 Javascript
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
详解JavaScript基于面向对象之继承
Dec 13 Javascript
Bootstrap php制作动态分页标签
Dec 23 Javascript
Angular2库初探
Mar 01 Javascript
详解JS构造函数中this和return
Sep 16 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
element-ui组件中input等的change事件中传递自定义参数
May 22 Javascript
iSlider手机端图片滑动切换插件使用详解
Dec 24 Javascript
使用jQuery或者原生js实现鼠标滚动加载页面新数据
Mar 06 #Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 #Javascript
JavaScript模拟数组合并concat
Mar 06 #Javascript
JavaScript模拟push
Mar 06 #Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 #Javascript
Node.js模块封装及使用方法
Mar 06 #Javascript
JavaScript中三种异步上传文件方式
Mar 06 #Javascript
You might like
PHP写的求多项式导数的函数代码
2012/07/04 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
javascript编程起步(第五课)
2007/02/27 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
Jquery实现弹性滑块滑动选择数值插件
2015/08/08 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
numpy.random.seed()的使用实例解析
2018/02/03 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
django 读取图片到页面实例
2020/03/27 Python
python math模块的基本使用教程
2021/01/16 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
培训主管的岗位职责
2013/11/23 职场文书
应用艺术毕业生的自我评价
2013/12/04 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
教师业务学习材料
2014/12/16 职场文书
小学中队长竞选稿
2015/11/20 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书