基于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 相关文章推荐
技术男用来对妹子表白的百度首页
Jul 23 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
JQuery实现动态添加删除评论的方法
May 18 Javascript
javascript实现网站加入收藏功能
Dec 16 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
JSON与String互转的实现方法(Javascript)
Sep 27 Javascript
微信小程序中做用户登录与登录态维护的实现详解
May 17 Javascript
jQuery表单验证之密码确认
May 22 jQuery
关于element-ui的隐藏组件el-scrollbar的使用
May 29 Javascript
解决layer.prompt无效的问题
Sep 24 Javascript
比较node.js和Deno
Apr 27 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基础知识:控制结构
2006/12/13 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
基于php实现的验证码小程序
2016/12/13 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
vue click.stop阻止点击事件继续传播的方法
2018/09/04 Javascript
使用apifm-wxapi模块中的问题及解决方法
2019/08/05 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
js实现扫雷源代码
2020/11/27 Javascript
使用Python的turtle模块画国旗
2019/09/24 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
如何使用Pytorch搭建模型
2020/10/26 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
世界上最大的二手相机店:KEN
2017/05/17 全球购物
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
软件设计的目标是什么
2016/12/04 面试题
2014年重阳节活动策划方案书
2014/09/16 职场文书
房屋授权委托书范本
2014/10/07 职场文书
故宫导游词
2015/01/31 职场文书
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL