基于zepto.js实现手机相册功能

发布时间 - 2026-01-11 02:17:38    点击率:

看完老师的视频做的一个手机相册,对我这种菜鸟来说还是直接上代码吧!里面用到17张小图,17张大图,还有animate.css和zepto.min.js ,都可以在网上找到。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<!-- <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"/> -->
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0"/>
<title>photo</title>
<link rel="stylesheet" href="animate.css"/>
<script src="zepto.min.js"></script>
<style type="text/css">
 blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,ul,li,img{
  margin: 0;
  padding: 0;
 }
 .clearfix::before,.clearfix::after{
  content:"";
  height: 0;
  line-height: 0;
  display: block;
  visibility: hidden;
  clear: both;
 }
 body{
  background-color: black;overflow: hidden;
 }
 ul{
  list-style: none;
 }
 .container li{  
  float: left;
  overflow: hidden;  
 }
 .large{
  height: 100%;
  width: 100%;
  position: absolute;
  left: 0;
  top: 0;
  background-color: black;
 }
</style>
</head>
<body>
 
<ul class="container clearfix" id="container"> 
</ul>

<div class="large animated fadeInDown" id="large_container" style="display: none;">
 <img id="large_img" />
</div>
<script>
 var num=17;
 var zWin=$(window);
 var render=function(){
  var padding=2;
  var winWidth=zWin.width();
  var picWidth=Math.floor((winWidth-padding*3)/4);
  var tmpl="";
  for (var i = 1; i <=num; i++) {
   var p = padding;
   var imgSrc='img/'+i+'.jpg';
   if (i%4==1) {
    p=0;
   }
   tmpl+='<li class="animated bounceIn" data-id="'+i+'" style=" width:'+picWidth+'px;height:'+picWidth+'px;padding-left:'+p+'px;padding-top:'+padding+'px "><canvas id="cvs_'+i+'"></canvas></li>'
   var imageObj=new Image();
    imageObj.index=i;
    imageObj.onload=function () {
     var cvs = $('#cvs_'+this.index)[0].getContext('2d');
     cvs.width=this.width;
     cvs.height=this.height;
     cvs.drawImage(this,0,0);
    }
    imageObj.src=imgSrc;
  } 
  $("#container").html(tmpl);
 }
 render();
 var wImage = $('#large_img');
 var domImage = wImage[0];    //image对象的DOM应用
 var loadImg = function (id,callback) {
  $('#container').css({height:zWin.height(),'overflow':'hidden'})
  // $('#container').css({'display':'none'})
  $('#large_container').css({
   width:zWin.width(),
   height:zWin.height()
  }).show();
  //加载大图
  var imgsrc = 'img/'+id+'.large.jpg';
  var imageObj = new Image();
  imageObj.onload = function () {
   var w = this.width;   //图片的宽高
   var h = this.height;
   var winWidth = zWin.width();  //window的宽高
   var winHidth = zWin.height();
   var realw = winHidth*w/h;
   var paddingLeft = parseInt((winWidth - realw)/2);
   var realh = winWidth*h/w;
   var paddingTop = parseInt((winHidth - realh)/2);
   //横图和竖图切换时需要重置大图的css样式
   wImage.css('width','auto').css('height','auto');
   wImage.css('padding-left','0px').css('padding-top','0px');
   //计算图片的宽高比,判断是横图还是竖图
   if (h/w>1.2) {
    //图片显示出来
    wImage.attr('src',imgsrc).css('height',winHidth).css('padding-left',paddingLeft)
   }else{
    wImage.attr('src',imgsrc).css('width',winWidth).css('padding-top',paddingTop)
   }
   callback&&callback();
  }
  imageObj.src = imgsrc;  
 }
 var cid;
 //给LI做事件绑定;
 $('#container').delegate('li','tap',function(){
  var _id = cid = $(this).attr('data-id')
  loadImg(_id)
 });

 //点击大图,返回相册
 $('#large_container').tap(function() {
  $('#container').css({height:'auto','overflow':'auto'})
  // $('#container').css({'display':'block'})
  $(this).hide();
 }).swipeLeft(function(){
  cid++;
  if(cid>num){
   cid = num;
  }else{
   loadImg(cid,function(){    //事件监听
    domImage.addEventListener('webkitAnimationEnd',function(){ //动画结束之后执行函数
     wImage.removeClass('animated bounceInRight');
     domImage.removeEventListener('webkitAnimationEnd')
    },false) //控制事件是否冒泡用false参数
    wImage.addClass('animated bounceInRight');
   });
  }
 }).swipeRight(function(){
  cid--;
  if(cid<1){
   cid = 1;
  }else{
   loadImg(cid,function(){
    domImage.addEventListener('webkitAnimationEnd',function(){
     wImage.removeClass('animated bounceInLeft');
     domImage.removeEventListener('webkitAnimationEnd')
    },false)
    wImage.addClass('animated bounceInLeft');
   });
  }
 })

</script>
</body>
</html>

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


# zepto.js  # 手机相册  # JavaScript实现相册弹窗功能(zepto.js)  # 基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解  # 菜鸟  # 对我  # 看完  # 绑定  # 大家多多  # 小图  # 结束之后  # 时需  # 加载  # 在网上  # fieldset  # form  # dl  # dt  # type  # text  # style  # script  # src  # href 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在万网开始建站?分步指南解析  如何在IIS中新建站点并解决端口绑定冲突?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Windows Hello人脸识别突然无法使用  如何在香港免费服务器上快速搭建网站?  php json中文编码为null的解决办法  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  LinuxShell函数封装方法_脚本复用设计思路【教程】  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何用狗爹虚拟主机快速搭建网站?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何使用withoutEvents方法临时禁用模型事件  佛山网站制作系统,佛山企业变更地址网上办理步骤?  网易LOFTER官网链接 老福特网页版登录地址  Laravel如何发送系统通知?(Notification渠道示例)  Laravel怎么为数据库表字段添加索引以优化查询  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何快速搭建二级域名独立网站?  Laravel如何处理表单验证?(Requests代码示例)  SQL查询语句优化的实用方法总结  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  网站制作报价单模板图片,小松挖机官方网站报价?  Android自定义控件实现温度旋转按钮效果  微信小程序 scroll-view组件实现列表页实例代码  Laravel如何为API编写文档_Laravel API文档生成与维护方法  西安专业网站制作公司有哪些,陕西省建行官方网站?  大连 网站制作,大连天途有线官网?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  lovemo网页版地址 lovemo官网手机登录  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  如何快速搭建个人网站并优化SEO?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  Laravel Fortify是什么,和Jetstream有什么关系  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  黑客入侵网站服务器的常见手法有哪些?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  详解MySQL数据库的安装与密码配置  如何快速辨别茅台真假?关键步骤解析  个人摄影网站制作流程,摄影爱好者都去什么网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  Laravel如何使用Blade模板引擎?(完整语法和示例)