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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
JS+CSS实现的蓝色table选项卡效果
Oct 08 Javascript
JS实现兼容性较好的随屏滚动效果
Nov 09 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
javascript实现数字配对游戏的实例讲解
Dec 14 Javascript
微信小程序实现图片预览功能
Jan 31 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
如何在Node和浏览器控制台中打印彩色文字
Jan 09 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
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
2011/03/19 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
php事务处理实例详解
2014/07/11 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
javascript之更有效率的字符串替换
2008/08/02 Javascript
csdn 博客的css样式 v3
2009/02/24 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
javascript中xml操作实现代码
2011/11/21 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
2014/06/27 Javascript
js读取cookie方法总结
2014/10/31 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
python自动点赞功能的实现思路
2020/02/26 Python
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
师范大学毕业自我鉴定
2013/11/21 职场文书
中学生获奖感言
2014/02/04 职场文书
房屋转让协议书
2014/04/11 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
Go标准容器之Ring的使用说明
2021/05/05 Golang