功能说明:

通过鼠标上下左右的移动,翻转呈现相册。支持浏览器IE6 7 8(IE8下会比较卡,IE6 7则不会) firefox chrome

效果图:

实现原理:

根据鼠标的坐标,以及层与层之间缩放的倍数,早鼠标移动时重新计算每层图片的宽度,高度以及位置,形成3D翻转效果。翻转角度和鼠标移动位移占页面一半宽度的比例成正比。

代码分析:

vardefaults={

containerId:'phos_container',/*id of photos' container*/imgSize:80,/*size of imgs*/imgMargin:100,/*margin between every img*/countEveryRow:4,/*imgs' count every in row*/times:1.5/*the max size of biggest scale*/},

首先指定一个储存默认值的单体,里面包括各种默认参数值,如容器ID,图片尺寸等。最后的times是层与层之间的缩放倍数,times越大,则显得图片和图片在翻转时距离较大。

function_setImgsStyle() {varimgs=container.getElementsByTagName("img");for(vari=0; i

top,

distant=defaults.imgMargin+defaults.imgSize,

n=(i+1)%defaults.countEveryRow;if(n==0)

left=(defaults.countEveryRow-1)*distant;elseleft=(n-1)*distant;

top=Math.floor(i/defaults.countEveryRow)*distant;

imgs[i].style.cssText='width:'+defaults.imgSize+'px;'+'height:'+defaults.imgSize+'px;'+'position:absolute;'+'left:'+left+'px;'+'top:'+top+'px;'+'display:block;';

}

}

设置每个图片样式的私有方法,里面通过图片的索引,设置图片在容器的位置,其中使用到cssText来批量设置样式属性。

function_setContainerStyle() {

container.style.cssText='width:'+newContainer_width+'px;'+'height:'+newContainer_height+'px;'+'position:absolute;'+'left:50%;'+'top:50%;'+'margin-left:'+newContainer_width/-2+'px;'+'margin-top:'+newContainer_height/-2+'px;'+'background-color:black;';

}

设置容器的样式,注意这里和demo的样式设置并不相同,这里是把容器相对于浏览器可视区域水平垂直局中,而demo中由于页面大小限制并没有这样做。

function_initCenterPoint() {varlen=defaults.imgSize+defaults.imgMargin;

centerPoint={

left: document.documentElement.clientWidth/2,

top: document.documentElement.clientHeight/2}

}

初始化屏幕中心点对象,该中心点是实现翻转效果的参考点。鼠标相对于该中心点的位移决定翻转的角度大小。

function_attachMouseMoveHandler() {

document.documentElement.οnmοusemοve=function(eve) {

eve=eve||window.event;varxpercent=((centerPoint.left-eve.clientX)/centerPoint.left),

ypercent=((centerPoint.top-eve.clientY)/centerPoint.top),

max_img_size=defaults.times*defaults.imgSize,

_size, _top, _left;for(vari=0; i0) {varxtimes=(1-n*(1/defaults.countEveryRow)),

size=xpercent*max_img_size*xtimes+(1-xpercent)*defaults.imgSize,

xaddleft=((newContainer_width-max_img_size*xtimes)/2-(defaults.imgSize+defaults.imgMargin)*n)*xpercent,

xtop=-((max_img_size*xtimes-defaults.imgSize)/2)*xpercent;

}elseif(xpercent<0) {varxtimes=1+(n-(defaults.countEveryRow-1))*(1/defaults.countEveryRow),

size=-xpercent*max_img_size*xtimes+(1+xpercent)*defaults.imgSize;

xaddleft=((newContainer_width-max_img_size*xtimes)/2-(defaults.imgSize+defaults.imgMargin)*n)*-xpercent,

xtop=-((max_img_size*xtimes-defaults.imgSize)/2)*-xpercent;

}

_size=size;

_left=(defaults.imgSize+defaults.imgMargin)*n+xaddleft;

_top=m*(defaults.imgSize+defaults.imgMargin)+xtop;if(ypercent>0) {varytimes=(1-m*(1/rowCount)),

size=ypercent*_size*defaults.times*ytimes+(1-ypercent)*_size,

yaddtop=((newContainer_width-_size*defaults.times*ytimes)/2-_top)*ypercent,

yleft=-((_size*defaults.times*ytimes-_size)/2)*ypercent;

}elseif(ypercent<0) {varytimes=1+(m-(rowCount-1))*(1/rowCount),

size=-ypercent*_size*defaults.times*ytimes+(1+ypercent)*_size,

yaddtop=((newContainer_width-_size*defaults.times*ytimes)/2-_top)*-ypercent,

yleft=-((_size*defaults.times*ytimes-_size)/2)*-ypercent;

}

_size=size;

_top=_top+yaddtop;

_left=_left+yleft;

imgs[i].style.width=imgs[i].style.height=_size+'px';

imgs[i].style.top=_top+'px';

imgs[i].style.left=_left+'px';

imgs[i].style.zIndex=Math.ceil(_size);

}

}

}

这里是整个程序最复杂的部分,通过对水平翻转以及垂直翻转两个“分运动”的计算最后得出总体的翻转情况,该实现可以细分为以下几个步骤:

1。获取鼠标x坐标相对于中心点位移占1/2页面宽度的百分比,该百分比映射到翻转角度的变化。

2.首先实现的是水平方向上的翻转,此时需要计算鼠标在水平方向上的移动导致图片大小以及位置的变化情况。

3.然后再在水平翻转计算结果的基础上,计算垂直翻转导致的图片大小以及位置的变化情况。

4.把两个分运动计算结果作为最终结果设置图片的样式值,其中要注意的是由于图片的大小越大,证明离观察者距离越短,所以应该层叠级最高,因此可以直接把图片尺寸取整后作为zIndex的值。

return{

init:function() {

_setContainerStyle();

_setImgsStyle();

_initCenterPoint();

_attachMouseMoveHandler();

}

}

最后返回单体,为调用者提供简单的接口init函数,该函数内部调用上文分析的多个私有函数。

外部初始化方式:

java3d翻转纪念相册_【CSON原创】 3D翻转相册发布相关推荐

  1. html3d上下翻转4面效果,纯CSS 3D翻转一个面(翻转导航菜单 立方体)

    在做练习的时候学到css的翻转导航菜单,原代码有点让人头疼,通过对其css的参数一点点研究了其实现过程. 这里推荐大家研究这个3D翻转动画的代码. 一 首先要知道坐标系的设定如下: 其次翻转关键的参数 ...

  2. java 编程动感相册_抖音3D立体动态相册实现代码下载

    今天这篇博客就分享下前端代码如何实现3D立体动态相册.赶紧学会了,来制作属于我们程序员的浪漫吧,别忘了发到自己抖音,让女朋友看一下!先上效果图,来引起下你们的兴趣. 再看看具体的效果: 一.新建一个i ...

  3. java相册_精致小巧的java相册制作方法

    本文实例为大家分享了java相册制作方法,供大家参考,具体内容如下 注: 1)html上的图片是静态指定的.当更新了新的图片时必须手工更新.所以使用Servlet读取本地images中的所有图片,动态 ...

  4. 华为手机8.0.0怎么找到云相册_华为手机里的相册照片删除了怎么找回?

    华为手机照片不小心删除了怎么找回?有些拍照达人,同样的地点,同样的姿势,都要拍上几十张,然后再慢慢整理手机中的照片,对残次品进行删除.但是,由于所有的照片都很相似,很容易删错照片.其实,删除的照片是可 ...

  5. java android 相册_基于安卓Android studio相册备份及管理系统的设计

    基于安卓Android studio相册备份及管理系统的设计(论文10000字,程序代码) 摘要:时代在不断地进步与发展着,用户手中的移动中终端越来越多的占据了人们的生活,可以说人们现在是十分依赖手机 ...

  6. kankan转载:Android实现3d翻转效果

    Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和 Transformation. Animation动画的主要接 ...

  7. css案例_下拉三角翻转

    css案例_下拉三角翻转 css案例_下拉三角翻转常见于 下拉导航 .表单下拉多选 等场景. 原理:三角可以看成是一个只具有右边框和底部边框的方形盒子通过 transform: rotate(45de ...

  8. java3d翻转纪念相册_HTML5 3D旋转相册的实现示例

    前一段时间,突然看到一个炫酷的3D旋转相册,这里记录一下,先看效果图: HTML5 代码如下: HTML5 3D旋转图片相册 可鼠标悬停 * { padding: 0; margin: 0; bord ...

  9. java3d翻转纪念相册_js实现3D旋转相册

    本文实例为大家分享了js实现3D旋转相册的具体代码,供大家参考,具体内容如下 效果展示: 使用图片: 剩余自己随意 图片大小为133*200 代码展示: 3D效果 * { background-col ...

最新文章

  1. centos 部署spring boot应用
  2. 怎么将导出的sql文件再次导入到数据库?
  3. 高效管理 GitHub Star,用这几个插件就能做到!
  4. 关于FactoryBean 和BeanFactory
  5. linux6.5dns装什么,1、RHEL6.5下DNS服务器的安装及简单应用(一)
  6. 关于ptype_all和pypte_base中的pt_prev的说明[转]
  7. attention :为什么要用attention机制
  8. linux取消登陆管理器,自动登录linux(不使用登录管理器)
  9. 最常用的网络应用工具之寻线仪
  10. 【深度学习】深度学习的四大组件
  11. JSTL Tutorial with Examples – JSTL Core Tags
  12. 全局配置_再次强调:必须站在全局的角度去考虑客厅的内机配置
  13. MP3、MP4、MP5、PSP
  14. 计算机极差全距符号,极差相对值的计算公式
  15. ghost之后仍然中病毒----与病毒的斗争
  16. 爱心的数学函数方程_数学里有哪些可以示爱的图像?它们的函数方程又是什么?...
  17. excel换行按什么键_4种方法,教你excel怎么自动换行
  18. poi java 导入excel_Java的poi技术读取和导入Excel
  19. JavaScript 对象大全
  20. PLC|MCU|DCS|模拟信号|隔离变送器|0-5V|0-10V|4-20mA|0-1V|0-75mV|0-30mV|0-1mA|0-20mA|隔离放大器|采集隔离模块应用原理

热门文章

  1. JS纯前端实现audio音频剪裁剪切复制播放与上传
  2. pythonista_什么是点子? 新Pythonista指南
  3. 全国英语等级考试计算机辅助口语考试,全国英语等级考试 计算机辅助高考口语考试练习软件文档.doc...
  4. arcgis10之要素合并
  5. 开机直接进入bios解决方法
  6. K39 ITX 桌面小机箱
  7. 解决WindowsForm窗体假死的状态
  8. NvidiaRTX3070Ti/GTX960M深度学习环境搭建教程
  9. css font-family常用的黑体宋体等字体中英文对照表
  10. vs 添加快捷键 | 修改快捷键、添加注释、添加快速插入代码(使用#if 0 注释)