基于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 的 prototype问题。
Jan 03 Javascript
select组合框option的捕捉实例代码
Sep 30 Javascript
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
Sep 30 Javascript
js open() 与showModalDialog()方法使用介绍
Sep 10 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 Javascript
浅析Node.js中的内存泄漏问题
Jun 23 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
Aug 25 Javascript
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
vue 实现用户登录方式的切换功能
Apr 14 Javascript
JS代码实现页面切换效果
Jan 10 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
用PHP实现多级树型菜单
2006/10/09 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
python 反向输出字符串的方法
2018/07/16 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
鱼油专家:Omegavia
2016/10/10 全球购物
英国团购网站:Groupon英国
2017/11/28 全球购物
澳大利亚优质葡萄酒专家:Vintage Cellars
2019/01/08 全球购物
企划专员岗位职责
2013/12/09 职场文书
幼儿园开学寄语
2014/04/03 职场文书
2016年企业安全生产月活动总结
2016/04/06 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
使用redis实现延迟通知功能(Redis过期键通知)
2021/09/04 Redis
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技
Pandas搭配lambda组合使用详解
2022/01/22 Python
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS