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


Posted in Javascript onJuly 11, 2017

看完老师的视频做的一个手机相册,对我这种菜鸟来说还是直接上代码吧!里面用到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>

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

Javascript 相关文章推荐
jquery实现简单的拖拽效果实例兼容所有主流浏览器
Jun 21 Javascript
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
Dec 17 Javascript
jQuery实现下拉加载功能实例代码
Apr 01 Javascript
JS中递归函数
Jun 17 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
微信小程序拍照和摄像功能实现方法示例
Feb 01 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
vue实现图片上传预览功能
Dec 23 Javascript
token 机制和实现方式
Dec 15 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 #Javascript
详解Webpack DLL用法以及功能
Jul 11 #Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 #Javascript
node使用UEditor富文本编辑器的方法实例
Jul 11 #Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
Jul 11 #Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 #Javascript
JS自定义滚动条效果简单实现代码
Oct 27 #Javascript
You might like
php数据库备份还原类分享
2014/03/20 PHP
php分页示例分享
2014/04/30 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
js中function()使用方法
2013/12/24 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
vue实现简单加法计算器
2020/10/22 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
Python读写ini文件的方法
2015/05/28 Python
详解 Python 与文件对象共事的实例
2017/09/11 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
教育科学研究生自荐信
2013/10/09 职场文书
应用化学专业职业生涯规划书
2013/12/31 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
产品质量承诺书范文
2014/03/27 职场文书
应聘护士求职信
2014/07/21 职场文书
保洁员岗位职责
2015/02/04 职场文书
正规借条模板
2015/05/26 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript