jQuery实现朋友圈查看图片


Posted in jQuery onSeptember 11, 2020

jQuery实现朋友圈查看图片效果,供大家参考,具体内容如下

效果: 图片点击显示大图,多张图可以滑动,左右按钮点击可切换查看图片 (左右点击切换效果不需要删除样式即可)

jQuery实现朋友圈查看图片

index.html 文件

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0,user-scalable=no,minimal-ui">
 <title>jQuery模仿朋友圈查看图片效果</title>
 <link rel="stylesheet" type="text/css" href="css/css.css" >
 <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch.css" >
 <script src="js/jquery-3.4.1.js"></script>
 <script src="js/touchTouch.jquery.js"></script>
 <script>
 $(function() {
 //图片事件 img-gather处为图片效果展示
 $('#thumbs a').touchTouch();
 });
 </script>
 </head>
 
 <body>
 <!--content-->
 <div class="content">
 <!--img-gather-->
 <div class="clearfix img-gather" id="thumbs">
 <a href="images/img1-large.png" style="background-image:url(images/img1-large.png)" title="图片一"></a>
 <a href="images/img2-large.jpg" style="background-image:url(images/img2-large.jpg)" title="图片二"></a>
 <a href="images/img1-large.png" style="background-image:url(images/img1-large.png)" title="图片一"></a>
 <a href="images/img2-large.jpg" style="background-image:url(images/img2-large.jpg)" title="图片二"></a>
 <a href="images/img1-large.png" style="background-image:url(images/img1-large.png)" title="图片一"></a>
 <a href="images/img2-large.jpg" style="background-image:url(images/img2-large.jpg)" title="图片二"></a>
 </div>
 <!--img-gather end-->
 </div>
 </body>
</html>

touchTouch.css 文件

预加载loading动图 preloader.gif

jQuery实现朋友圈查看图片

左右切换按钮图片 arrows.png(不需要可删除)

jQuery实现朋友圈查看图片

#galleryOverlay{
 width:100%;
 height:100%;
 position:fixed;
 top:0;
 left:0;
 opacity:0;
 z-index:100000;
 background-color:#222;
 background-color:rgba(0,0,0,1);
 overflow:hidden;
 display:none;
 -moz-transition:opacity 1s ease;
 -webkit-transition:opacity 1s ease;
 transition:opacity 1s ease;
}
#galleryOverlay.visible{
 opacity:1;
}
#gallerySlider{
 height:100%;
 left:0;
 top:0;
 width:100%;
 white-space: nowrap;
 position:absolute;
 -moz-transition:left 0.4s ease;
 -webkit-transition:left 0.4s ease;
 transition:left 0.4s ease;
}
#gallerySlider .placeholder{
 /* preloader.gif 预加载loading动图 */
 background: url("preloader.gif") no-repeat center center;
 height: 100%;
 line-height: 1px;
 text-align: center;
 width:100%;
 display:inline-block;
}
#gallerySlider .placeholder:before{
 content: "";
 display: inline-block;
 height: 50%;
 width: 1px;
 margin-right:-1px;
}
#gallerySlider .placeholder img{
 display: inline-block;
 max-height: 100%;
 max-width: 100%;
 vertical-align: middle;
}
#gallerySlider.rightSpring{
 -moz-animation: rightSpring 0.3s;
 -webkit-animation: rightSpring 0.3s;
}
#gallerySlider.leftSpring{
 -moz-animation: leftSpring 0.3s;
 -webkit-animation: leftSpring 0.3s;
}
/* Firefox Keyframe Animations */
@-moz-keyframes rightSpring{
 0%{
 margin-left:0px;
 }
 50%{
 margin-left:-30px;
 }
 100%{
 margin-left:0px;
 }
}
@-moz-keyframes leftSpring{
 0%{
 margin-left:0px;
 }
 50%{
 margin-left:30px;
 }
 100%{
 margin-left:0px;
 }
}
/* Safari and Chrome Keyframe Animations */
@-webkit-keyframes rightSpring{
 0%{
 margin-left:0px;
 }
 50%{
 margin-left:-30px;
 }
 100%{
 margin-left:0px;
 }
}
@-webkit-keyframes leftSpring{
 0%{
 margin-left:0px;
 }
 50%{
 margin-left:30px;
 }
 100%{
 margin-left:0px;
 }
}
/* 左右切换按钮 */
/* arrows.png 左右切换按钮图片 不需要可删除 */
#prevArrow,#nextArrow{
 border:none;
 text-decoration:none;
 background:url('arrows.png') no-repeat;
 opacity:1;
 cursor:pointer;
 position:absolute;
 width:43px;
 height:58px;
 top:50%;
 margin-top:-29px;
 -moz-transition:opacity 0.2s ease;
 -webkit-transition:opacity 0.2s ease;
 transition:opacity 0.2s ease;
}
#prevArrow:hover, #nextArrow:hover{
 opacity:1;
}
#prevArrow{
 background-position:left top;
 left:40px;
}
#nextArrow{
 background-position:right top;
 right:40px;
}
/* 页码 */
#pagelimit{
 position:absolute;
 bottom:20px;
 left:50%;
 margin-left:-18px;
 color:#fff;
 font-size:1.4rem;
}

touchTouch.jquery.js 文件

(function(){
 /* Private variables */
 var overlay = $('<div id="galleryOverlay">'),
 slider = $('<div id="gallerySlider">'),
 prevArrow = $('<a id="prevArrow"></a>'),
 nextArrow = $('<a id="nextArrow"></a>'),
 pageSpan = $('<span id="pagelimit"></span'),
 overlayVisible = false;
 
 /* Creating the plugin */
 $.fn.touchTouch = function(){
 var placeholders = $([]),
 pl1=[],
 index = 0,
 items = this;
 
 // Appending the markup to the page
 overlay.hide().appendTo('body');
 slider.appendTo(overlay);
 pageSpan.appendTo(overlay);
 
 // Creating a placeholder for each image
 items.each(function(){
 placeholders = placeholders.add($('<div class="placeholder">'));
 });
 
 // Hide the gallery if the background is touched / clicked
 slider.append(placeholders).on('click',function(e){
 hideOverlay(); 
 });
 
 // Listen for touch events on the body and check if they
 // originated in #gallerySlider img - the images in the slider.
 $('body').on('touchstart', '#gallerySlider img', function(e){
 var touch = e.originalEvent,
 startX = touch.changedTouches[0].pageX;
 slider.on('touchmove',function(e){
 e.preventDefault();
 touch = e.originalEvent.touches[0] ||e.originalEvent.changedTouches[0];
 if(touch.pageX - startX > 10){
 slider.off('touchmove');
 showPrevious();
 }
 else if (touch.pageX - startX < -10){
 slider.off('touchmove');
 showNext();
 }
 
 });

 // Return false to prevent image 
 // highlighting on Android
 return false;
 }).on('touchend',function(){
 slider.off('touchmove');
 });
 
 // Listening for clicks on the thumbnails
 
 //评论事件
 
 items.on('click', function(e){
 e.preventDefault();
 // Find the position of this image
 // in the collection
 
 index = items.index(this);
 showOverlay(index);
 showImage(index);
 
 calcPages(items,index);
 // Preload the next image
 preload(index+1);
 
 // Preload the previous
 preload(index-1);
 $(document).data("overlayVisible",true);
 e.cancelBubble = true; //取消冒泡事件
 //e.stopPropagation(); 
 
 });
 
 
 
 function calcPages(items,index){
 pageSpan.text((index+1)+"/"+items.length);
 }
 // If the browser does not have support 
 // for touch, display the arrows
 if ( !("ontouchstart" in window) ){
 overlay.append(prevArrow).append(nextArrow);
 
 prevArrow.click(function(e){
 e.preventDefault();
 showPrevious();
 });
 
 nextArrow.click(function(e){
 e.preventDefault();
 showNext();
 });
 }
 
 // Listen for arrow keys
 $(window).bind('keydown', function(e){
 if (e.keyCode == 37){
 showPrevious();
 }
 else if (e.keyCode==39){
 showNext();
 }
 });
 
 
 /* Private functions */
 
 
 function showOverlay(index){
 // If the overlay is already shown, exit
 if (overlayVisible){
 return false;
 }
 
 // Show the overlay
 overlay.show();
 
 setTimeout(function(){
 // Trigger the opacity CSS transition
 overlay.addClass('visible');
 }, 100);
 
 // Move the slider to the correct image
 offsetSlider(index);
 
 // Raise the visible flag
 overlayVisible = true;
 }
 
 function hideOverlay(){
 // If the overlay is not shown, exit
 
 if(!overlayVisible){
 return false;
 }
 
 // Hide the overlay
 overlay.hide().removeClass('visible');
 overlayVisible = false;
 $(document).data("overlayVisible",overlayVisible);
 }
 
 function offsetSlider(index){
 // This will trigger a smooth css transition
 slider.css('left',(-index*100)+'%');
 }
 
 // Preload an image by its index in the items array
 function preload(index){
 setTimeout(function(){
 showImage(index);
 }, 1000);
 }
 
 // Show image in the slider
 function showImage(index){
 
 // If the index is outside the bonds of the array
 if(index < 0 || index >= items.length){
 return false;
 }
 
 // Call the load function with the href attribute of the item
 loadImage(items.eq(index).attr('href'), function(){
 placeholders.eq(index).html(this);
 });
 }
 
 // Load the image and execute a callback function.
 // Returns a jQuery object
 
 function loadImage(src, callback){
 var img = $('<img>').on('load', function(){
 callback.call(img);
 });
 img.attr('src',src);
 }
 
 function showNext(){
 
 // If this is not the last image
 if(index+1 < items.length){
 index++;
 offsetSlider(index);
 preload(index+1);
 calcPages(items,index);
 }
 else{
 // Trigger the spring animation
 
 slider.addClass('rightSpring');
 setTimeout(function(){
 slider.removeClass('rightSpring');
 },500);
 }
 }
 
 function showPrevious(){
 
 // If this is not the first image
 if(index>0){
 index--;
 offsetSlider(index);
 preload(index-1);
 calcPages(items,index);
 }
 else{
 // Trigger the spring animation
 slider.addClass('leftSpring');
 setTimeout(function(){
 slider.removeClass('leftSpring');
 },500);
 }
 }
 };
})(jQuery);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
JQuery 获取Dom元素的实例讲解
Jul 08 jQuery
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
Oct 13 jQuery
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
jQuery实现可编辑的表格
Dec 11 jQuery
jQuery实现日历效果
Sep 11 #jQuery
jquery实现简单每周轮换的日历
Sep 10 #jQuery
如何使用jQuery操作Cookies方法解析
Sep 08 #jQuery
jQuery实现简单三级联动效果
Sep 05 #jQuery
如何基于jQuery实现五角星评分
Sep 02 #jQuery
jQuery中getJSON跨域原理的深入讲解
Sep 02 #jQuery
Jquery $.map使用方法实例详解
Sep 01 #jQuery
You might like
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
php旋转图片90度的方法
2013/11/07 PHP
php多个文件及图片上传实例详解
2014/11/10 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
自定义百度分享的分享按钮
2015/03/18 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
AngularJS中table表格基本操作示例
2017/10/10 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
weebox弹出窗口不居中显示的解决方法
2017/11/27 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
python函数形参用法实例分析
2015/08/04 Python
Python探索之Metaclass初步了解
2017/10/28 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
使用python实现kNN分类算法
2019/10/16 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
标准毕业生自荐信范文
2013/11/04 职场文书
实习自我评价怎么写
2013/12/02 职场文书
学前班教师的自我鉴定
2013/12/05 职场文书
给分销商的致歉信
2014/01/14 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
工商管理自荐书
2014/07/06 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
2016年安全月活动总结
2016/04/06 职场文书