基于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 相关文章推荐
JavaScript加强之自定义callback示例
Sep 21 Javascript
javascript从右边截取指定字符串的三种实现方法
Nov 29 Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 Javascript
javascript设计模式之中介者模式Mediator
Dec 30 Javascript
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
javascript中对Date类型的常用操作小结
May 19 Javascript
移动端 一个简单易懂的弹出框
Jul 06 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
Vue项目中引入外部文件的方法(css、js、less)
Jul 24 Javascript
JavaScript数组特性与实践应用深入详解
Dec 30 Javascript
CKeditor富文本编辑器使用技巧之添加自定义插件的方法
Jun 14 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
计数器详细设计
2006/10/09 PHP
php数据库连接
2006/10/09 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
python实现读取命令行参数的方法
2015/05/22 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
亚运会口号
2014/06/20 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
护士业务学习心得体会
2016/01/25 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle