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 相关文章推荐
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
Apr 15 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
js 判断各种数据类型的简单方法(推荐)
Aug 29 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
Jun 23 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
nuxt.js 缓存实践
Jun 25 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
Aug 02 Javascript
解决vue字符串换行问题(绝对管用)
Aug 06 Javascript
JavaScript实现班级抽签小程序
May 19 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
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
PHP文件操作实现代码分享
2011/09/01 PHP
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
php实现微信支付之现金红包
2018/05/30 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
2020/05/15 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
解决vue init webpack 下载依赖卡住不动的问题
2020/11/09 Javascript
Python随机数用法实例详解【基于random模块】
2017/04/18 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python 数据生成excel导出(xlwt,wlsxwrite)代码实例
2019/08/23 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
采购文员岗位职责
2013/11/20 职场文书
计算机专业推荐信范文
2013/11/27 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
长城导游词
2015/01/30 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书