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实现字体颜色渐变效果的方法
Mar 29 jQuery
js和jquery中获取非行间样式
May 05 jQuery
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
jquery实现一个全局计时器(商城可用)
Jun 30 jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
解决jquery appaend元素中id绑定事件失效的问题
Sep 12 jQuery
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
jQuery 实现倒计时天,时,分,秒功能
Jul 31 jQuery
jQuery实现轮播图及其原理详解
Apr 12 jQuery
浅谈JS和jQuery的区别
Mar 27 jQuery
jQuery实现简单飞机大战
Jul 05 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
List Installed Hot Fixes
2007/06/12 Javascript
jQuery入门知识简介
2010/03/04 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
vue中如何实现pdf文件预览的方法
2018/07/12 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python 基础知识之字符串处理
2017/01/06 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
python3写爬取B站视频弹幕功能
2017/12/22 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
《雪儿》教学反思
2014/04/17 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
参观邀请函范文
2015/02/02 职场文书
重阳节活动主持词
2015/07/04 职场文书
师德师风培训感言
2015/08/03 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android