基于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 相关文章推荐
(JS实现)MapBar中坐标的加密和解密的脚本
May 16 Javascript
最佳JS代码编写的14条技巧
Jan 09 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
Nov 07 Javascript
基于Jquery实现表单验证
Jul 20 Javascript
JS获取鼠标选中的文字
Aug 10 Javascript
JS 实现可停顿的垂直滚动实例代码
Nov 23 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
javascript中this用法实例详解
Apr 06 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
Mar 04 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 5.3.5安装memcache注意事项小结
2011/04/12 PHP
关于php mvc开发模式的感想
2011/06/28 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
JS支持带x身份证号码验证函数
2008/08/10 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
JS制作简易计算器的实例代码
2020/07/04 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
详解python做UI界面的方法
2019/02/27 Python
django query模块
2019/04/20 Python
Python 3.8 新功能全解
2019/07/25 Python
django中瀑布流写法实例代码
2019/10/14 Python
浅谈Python 命令行参数argparse写入图片路径操作
2020/07/12 Python
浅析python连接数据库的重要事项
2021/02/22 Python
求职信内容怎么写
2014/05/26 职场文书
工地质量标语
2014/06/12 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
七夕情人节问候语
2015/11/11 职场文书
苹果的回收机器人可以通过拆解iPhone获取大量的金和铜并外公布了环境保护最新进展
2022/04/21 数码科技