jquery实现的缩略图预览滑块实例


Posted in Javascript onJune 25, 2015

本文实例讲述了jquery实现的缩略图预览滑块。分享给大家供大家参考。具体如下:

运行效果如下图所示:

jquery实现的缩略图预览滑块实例

主要代码如下:

(function($) {
$.fn.thumbnailSlider = function(options) {
var opts = $.extend({}, $.fn.thumbnailSlider.defaults, options);
return this.each(function() {
var $this = $(this),
o = $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;
var $ts_container= $this.children('.ts_container'),
$ts_thumbnails= $ts_container.children('.ts_thumbnails'),
$nav_elems= $ts_container.children('li').not($ts_thumbnails),
total_elems= $nav_elems.length,
$ts_preview_wrapper= $ts_thumbnails.children('.ts_preview_wrapper'),
$arrow= $ts_thumbnails.children('span'),
$ts_preview= $ts_preview_wrapper.children('.ts_preview');
/* 
计算出$ts_thumbnails的尺寸:
width -> width thumbnail + border (2*5)
height -> height thumbnail + border + triangle height(6)
top-> -(height plus margin of 5)
left-> leftDot - 0.5*width + 0.5*widthNavDot 
当鼠标经过导航的时候它将会被设定并且默认的值将会赋给导航的第一个预览点
*/
var w_ts_thumbnails= o.thumb_width + 2*5,
h_ts_thumbnails= o.thumb_height + 2*5 + 6,
t_ts_thumbnails= -(h_ts_thumbnails + 5),
$first_nav= $nav_elems.eq(0),
l_ts_thumbnails= $first_nav.position().left - 0.5*w_ts_thumbnails + 0.5*$first_nav.width();
$ts_thumbnails.css({
width: w_ts_thumbnails + 'px',
height: h_ts_thumbnails + 'px',
top: t_ts_thumbnails + 'px',
left: l_ts_thumbnails + 'px'
});
/*
计算出提示箭头的上方和左边的位置
top-> thumb height + border(2*5)
left-> (thumb width + border)/2 -width/2
*/
var t_arrow= o.thumb_height + 2*5,
l_arrow= (o.thumb_width + 2*5) / 2 - $arrow.width() / 2;
$arrow.css({
left: l_arrow + 'px',
top: t_arrow + 'px'
});
/*
计算出$ts_preview的宽度->缩略图的宽度乘以所有缩略图的数量
*/
$ts_preview.css('width' , total_elems*o.thumb_width + 'px');
/*
设定 $ts_preview_wrapper 的宽度和高度 -> thumb width / thumb height
*/
$ts_preview_wrapper.css({
width: o.thumb_width + 'px',
height: o.thumb_height + 'px'
});
//鼠标经过导航的元素
$nav_elems.bind('mouseenter',function(){
var $nav_elem= $(this),
idx= $nav_elem.index();
/*
计算出 $ts_thumbnails 最新的左侧距离
*/
var new_left= $nav_elem.position().left - 0.5*w_ts_thumbnails + 0.5*$nav_elem.width();
$ts_thumbnails.stop(true)
.show()
.animate({
left: new_left + 'px'
},o.speed,o.easing); 
/*
动画从 $ts_preview 的左侧过渡到右边的缩略图
*/
$ts_preview.stop(true)
.animate({
left: -idx*o.thumb_width + 'px'
},o.speed,o.easing);
//当鼠标停留的时候图片进行放大
if(o.zoom && o.zoomratio > 1){
var new_width= o.zoomratio * o.thumb_width,
new_height= o.zoomratio * o.thumb_height;
//增加 $ts_preview 的宽度为了能够让图片放大
var ts_preview_w= $ts_preview.width();
$ts_preview.css('width' , (ts_preview_w - o.thumb_width + new_width) + 'px');
$ts_preview.children().eq(idx).find('img').stop().animate({
width: new_width + 'px',
height: new_height + 'px'
},o.zoomspeed);
}
}).bind('mouseleave',function(){
//如果放大了设置它的宽度和高度为默认值
if(o.zoom && o.zoomratio > 1){
var $nav_elem= $(this),
idx= $nav_elem.index();
$ts_preview.children().eq(idx).find('img').stop().css({
width: o.thumb_width + 'px',
height: o.thumb_height + 'px'
});
}
$ts_thumbnails.stop(true)
.hide();
}).bind('click',function(){
var $nav_elem= $(this),
idx= $nav_elem.index();
o.onClick(idx);
});
});
};
$.fn.thumbnailSlider.defaults = {
speed: 100,// 幻灯片过渡的动画速度
easing: 'jswing',// easing动画效果
thumb_width: 75,//您的图片宽度
thumb_height: 75,//您的图片高度
zoom: false,//缩略图是否放大
zoomratio: 1.3,// 放大比率(数值必须大于1)
zoomspeed: 15000,//放大动画的速度
onClick: function(){return false;}//点击回发
};
})(jQuery);

完整实例代码点击此处本站下载。

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
jQuery 开发者应该注意的9个错误
May 03 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
Dec 25 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
JS嵌套函数调用上下文的问题解决
Mar 26 Javascript
Windows系统下Node.js的简单入门教程
Jun 23 Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
Mar 21 Javascript
JS实现图片预加载之无序预加载功能代码
May 12 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
使用javascript提交form表单方法汇总
Jun 25 #Javascript
Jquery结合HTML5实现文件上传
Jun 25 #Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 #Javascript
javascript学习笔记之函数定义
Jun 25 #Javascript
把Node.js程序加入服务实现随机启动
Jun 25 #Javascript
javascript控制台详解
Jun 25 #Javascript
jquery实现浮动的侧栏实例
Jun 25 #Javascript
You might like
WINXP下apache+php4+mysql
2006/11/25 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
php实现过滤表单提交中html标签的方法
2014/10/17 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
自写的一个jQuery圆角插件
2010/10/26 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
推荐25个超炫的jQuery网格插件
2014/11/28 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
Python 爬虫模拟登陆知乎
2016/09/23 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
总经理岗位职责描述
2014/02/08 职场文书
租房协议书怎么写
2014/04/10 职场文书
保护环境倡议书范文
2014/05/13 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS