Title

html,

body {

margin: 0;

padding: 0;

background-color: #29454d;

/*禁止文字被选中*/

-moz-user-select: none;

/*火狐*/

-webkit-user-select: none;

/*webkit浏览器*/

-ms-user-select: none;

/*IE10*/

-khtml-user-select: none;

/*早期浏览器*/

user-select: none;

overflow: hidden;

}

.box {

position: relative;

height: 500px;

width: 500px;

margin: 100px auto;

transform-style: preserve-3d;

perspective: 2000px;

}

.di {

position: absolute;

left: 50%;

top: 50%;

height: 200px;

width: 200px;

transform: translate(-50%, -50%) rotatex(90deg);

transform-style: preserve-3d;

}

.z {

position: relative;

height: 200px;

width: 200px;

border-radius: 50%;

transform-style: preserve-3d;

/*transform: rotatez(1deg);*/

}

p {

margin: 0;

position: absolute;

top: 0;

/*为了保证圆心在父盒子中心,父盒子旋转时圆心稳定,所以设置left*/

left: 25px;

height: 200px;

width: 150px;

border: 2px solid #fd7068;

box-sizing: border-box;

background-color: #ffffff;

background-size: cover;

background-position: center;

background-repeat: no-repeat;

/*opacity: .7;*/

font-size: 10px;

line-height: 200px;

text-align: center;

/*box-shadow: 0 0 100px #16ff8b;*/

/*倒影,不兼容*/

-webkit-box-reflect: below 10px -webkit-linear-gradient(top, rgba(250, 250, 250, 0), rgba(250, 250, 250, .0) 30%, rgba(250, 250, 250, 0.5));

box-reflect: below 10px -webkit-linear-gradient(top, rgba(250, 250, 250, 0), rgba(250, 250, 250, .0) 30%, rgba(250, 250, 250, 0.5));

/*backface-visibility: hidden;*/

}

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

可以拖拽图片文件进来

window.onload = function () {

setPs();

move();

drop();

}

//给每个p标签设置位置

function setPs() {

var ps = document.getElementsByTagName('p');

for (var i = 0; i < ps.length; i++) {

ps[i].style.transform = 'rotatex(-90deg) rotatey(' + i * 30 + 'deg) translatez(400px)'

}

}

//鼠标拖动旋转

function move() {

var zBox = document.querySelector('.z');

var xBox = document.querySelector('.di');

//声明计算鼠标移动速度用的变量

var speedTimer = null;

var speedX = 0;

var speedY = 0;

//声明记录旋转角度的两个变量

var xDegNow = 90;

var zDegNow = 0;

//声明变量记录要旋转的角度

var xDegDistance = 0;

var zDegDistance = 0;

//声明变量记录是否发生鼠标移动事件

var isMove = false;

window.onmousedown = function (e) {

//鼠标按下

//清除过渡属性

xBox.style.transition = '';

zBox.style.transition = '';

//记录按下的坐标以及计算速度的初始坐标

var xstart = e.clientX;

var speedX_start = xstart;

var ystart = e.clientY;

var speedY_start = ystart;

//记录用来计算速度的初始时间

var tstart = new Date().getTime();

var tnow = tstart;

//设置计时器更新计算速度的当时时间

speedTimer = setInterval(function () {

tnow = new Date().getTime();

},10)

window.onmousemove = function (e) {

//鼠标移动

isMove = true;

//记录当时的坐标计算距离

var xnow = e.clientX;

var ynow = e.clientY;

var xDistance = xnow - xstart;

var yDistance = ynow - ystart;

//如果计时超过一定时间(10毫秒),计算速度

if (tnow - tstart >= 10) {

//速度=(现在的坐标-初始坐标)/(现在时间-初始时间)

speedX = (xnow - speedX_start) / (tnow - tstart);

speedY = (ynow - speedY_start) / (tnow - tstart);

//让初始时间和坐标等于现在的时间和坐标

tstart = tnow;

speedX_start = xnow;

speedY_start = ynow;

}

//把鼠标移动距离计算成角度后设置到页面上

zDegDistance = zDegNow - (xDistance / 10);

zBox.style.transform = 'rotatez(' + zDegDistance + 'deg)';

xDegDistance = xDegNow - (yDistance / 10);

xDegDistance = xDegDistance > 179 ? 179 : xDegDistance < 1 ? 1 : xDegDistance;

xBox.style.transform = 'translate(-50%,-50%) rotatex(' + xDegDistance + 'deg)';

};

};

window.onmouseup = function (e) {

//鼠标松开

//清除计时器 清除鼠标移动事件

clearTimeout(speedTimer);

window.onmousemove = null;

//判断如果发生移动

if (isMove) {

//添加过渡属性

xBox.style.transition = 'all 0.5s ease-out';

zBox.style.transition = 'all 0.5s ease-out';

//根据速度计算目标角度,设置到页面上

zDegDistance = zDegDistance - (speedX * 10);

zBox.style.transform = 'rotatez(' + zDegDistance + 'deg)';

xDegDistance = xDegDistance - (speedY * 10);

xDegDistance = xDegDistance > 179 ? 179 : xDegDistance < 1 ? 1 : xDegDistance;

xBox.style.transform = 'translate(-50%,-50%) rotatex(' + xDegDistance + 'deg)';

//记录当前角度的值更新

xDegNow = xDegDistance;

zDegNow = zDegDistance;

//用到的变量重置

isMove = false;

speedX = 0;

speedY = 0;

xDegDistance = 0;

zDegDistance = 0;

}

};

}

//鼠标拖拽文件

function drop() {

//取消鼠标拖拽文件进入窗口的默认行为

window.ondragover = function (e) {

e.preventDefault();

}

window.ondrop = function (e) {

e.preventDefault();

}

//添加拖拽到p标签的事件

var ps = document.getElementsByTagName('p');

for (var i = 0; i < ps.length; i++) {

ps[i].index = i;

ps[i].ondrop = function (e) {

var w = new FileReader();

w.index = this.index;

w.readAsDataURL(e.dataTransfer.files[0]);

w.onload = function () {

ps[this.index].style.backgroundImage = 'url(' + w.result + ')';

ps[this.index].innerHTML = '';

}

}

}

}

html js相册样式,使用html+css+js实现3D相册相关推荐

  1. 超炫html+css+javascript幻化3D相册 (含背景音乐)程序员表白必备 _520_七夕情人节

    ❉ 超炫html+css+javascript幻化3D相册 (含背景音乐)程序员表白必备 _520_七夕情人节 一年一度的/520情人节/七夕情人节/生日礼物/告白师妹/程序员表白,是不是要给女朋友或 ...

  2. HTML5七夕情人节表白网页_圣诞节3d相册(含音乐)_HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码

    HTML5七夕情人节表白网页❤圣诞节3d相册(不含音乐开关)❤ HTML+CSS+JS 求婚 html生日快乐祝福代码网页 520情人节告白代码 程序员表白源码 抖音3D旋转相册 js烟花代码 css ...

  3. JS表单验证(HTML+CSS+JS)小实例【详细教程】

    前言 大家好,分享一个HTML+CSS+JS表单校验,包括页面的简单布局,样式渲染,还有基础的JS校验方法.希望大家喜欢!哈哈 一.效果图 二.介绍 图标库使用Element-UI <!-- 引 ...

  4. JS表单验证(HTML+CSS+JS)详细教程

    大家好,今天分享一个HTML+CSS+JS表单验证,这是我前两天学习的一个小demo,在这记录一下. 目录 一.效果图 二.介绍 三.代码 (1)HTML (2)CSS (3)JavaScript J ...

  5. python3d相册源代码_js和CSS3炫酷3D相册展示

    js和CSS3炫酷3D相册展示 *{margin:0;padding:0;} body{background:url(img/bg.jpg);width:100%;height:100%;overfl ...

  6. 《个人相册》项目相册页面(HTML+CSS+JS)

    CSS部分 body {margin: 0px; }#title {width: 100%;height: 50px;background: #000; }#title1 {float: left;c ...

  7. js css3实现tab,div+css+js实现tab页

    实现tab页并水平居中 ruby { font-size:60px; color:red; font-family:微软雅黑; } .tab { border:solid 1px; border-co ...

  8. 一行代码教你撩妹手到擒来❤html+css+js烟花告白3D相册(含音乐+可自定义文字)520表白/七夕情人节/求婚

    ❤ 我是如何获取学姐芳心~html+css+js实现满屏烟花3D相册(含音乐+自定义文字) 一年一度的520情人节/七夕情人节/女朋友生日/程序员表白/送礼物/3D相册,是不是要给女朋友或者正在追求的 ...

  9. 一行代码教你撩妹手到擒来html+css+js烟花告白3D相册(含音乐+可自定义文字)520表白/七夕情人节/求婚...

    ❤ 我是如何获取学姐芳心~html+css+js实现满屏烟花3D相册(含音乐+自定义文字) 一年一度的520情人节/七夕情人节/女朋友生日/程序员表白/送礼物/3D相册,是不是要给女朋友或者正在追求的 ...

最新文章

  1. “5G杀手级应用”Cloud VR 华为如何打响5G第一枪
  2. 某医院DFT SCSI 300GB *8 RAID5数据恢复成功
  3. AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——10:00-10:30张亚勤教授《智能产业新浪潮》
  4. spring中事务控制的一组API
  5. mysql的快照速度_mysql 快照读 当前度
  6. linux交叉编译tile环境搭建,g ++ - 在Ubuntu中在32位上交叉编译64位程序时,缺少包含“bits / c ++ config.h”...
  7. 克鲁斯卡尔算法(公交站问题)
  8. NHibernate.3.0.Cookbook第三章第9节的翻译
  9. 【XML】Java对象数据的XML和JSON表示
  10. oracle 远程连接超时问题
  11. gridview中的种种超级链接
  12. linux查看程序的快捷键,linux操作系统的快捷键及命令讲解
  13. 阿里五年晋升三次,选择真的大于努力?
  14. Android APK系列6-------APK反编译
  15. ios 现有项目接入Flutter (问题集中营--少走弯路)
  16. VirtualBox导入虚拟机错误e_invalidarg (0x80070057) 使用管理员权限打开VirtualBox
  17. 【程序员必读】经验:编程的智慧
  18. 小米扫地机器人粉尘盒_小米扫地机器人尘盒怎么打开
  19. 笔记本电脑忽然变得很卡,求解
  20. 在javascript中重新加载/刷新页面的不同方法

热门文章

  1. 电商平台实时监控系统丨前端项目的准备
  2. android 主流机型适配,Android 10将适配三年前机型,再度证明了旗舰的价值
  3. 如何理解“已出库未开票”?
  4. monkey事件 -- 11种事件(三)
  5. 物联网关键技术-停车场收费系统
  6. AutoAssign
  7. Day09 红帽Linux — 2控制对文件的访问
  8. Element分析(工具篇)帮助我们定位元素 = Popper.js
  9. SAP 设置快捷登陆
  10. ZYNQ 7020 FPGA DDR3