文章目录

  • 实现效果
  • 代码
    • HTML代码
    • CSS代码
    • JavaScript代码
  • 项目地址

实现效果

3D透视图演示

代码

HTML代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3D透视图</title>
</head>
<body><div id="position"><div id="scale"><div id="container"></div> /* 图片容器 */<div id="scaleCur"></div> /* 用来缩放图片 */</div></div>
</body>

CSS代码

<style>#position {background-color:slategray;}#scale {position: absolute;display: grid;grid-template-columns: auto 10px;grid-template-rows: auto 10px;width: 760px;height: 460px;background-color: black;}#container {grid-column: 1/2;grid-row: 1/2;transform-style: preserve-3d;}#scaleCur {grid-column: 2/3;grid-row: 2/3;background-color: black;cursor: se-resize;}img {display: block;position: absolute;transition: transform 2s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 2s cubic-bezier(0.175, 0.885, 0.32, 1.275);}#center {transform: translateZ(300px);   transition: transform 1s linear;}</style>

JavaScript代码

<script>window.onload=function(){let scale = document.getElementById("scale");let container = document.getElementById("container");// 初始化图片let init  = function () {let containerWidth = container.clientWidth;let containerHeight = container.clientHeight;let imgiWidth = containerWidth/15;let imgiHeight = containerHeight/15;for(let i = 0; i < 225; i++) {let col = i % 15; // 计算第i个<img>位于第几列let row = Math.floor(i / 15);// 计算第i个<img>位于第几行let imgi = document.createElement("img");imgi.setAttribute("src", "./img/1.jpg");imgi.style.width = `${containerWidth}px`;imgi.style.height = `${containerHeight}px`;imgi.style.clipPath = `inset(${row*imgiHeight-1}px${(14-col)*imgiWidth-1}px${(14-row)*imgiHeight-1}px${col*imgiWidth-1}px)`;imgi.style.transformOrigin = `${col*imgiWidth-0.5*imgiWidth}px${row*imgiHeight+0.5*imgiHeight}px 0px`;container.appendChild(imgi);if (i === 112) {imgi.id = "center";let center = document.getElementById("center");center.addEventListener("click",disapperFun);}}// 消失事件function disapperFun () {center.style.transform = "translateZ(0px)";let diappeer = setTimeout(function(){let imgs = document.getElementsByTagName("img");for (let j of imgs) {j.style.opacity = 0;let dire = Math.random() > 0.5 ? 1 : -1;j.style.transform = `rotate3d(0,0,1,${dire*Math.random()*180}deg) translateZ(-500px) skew(${Math.random()*80}deg,${Math.random()*80}deg)`;}},1200);return false;}}init();// 利用立即执行函数为container添加初始transform属性值,避免transformStr获取为空(function() {container.style.transform = "rotate3d(0,0,0,0deg) perspective(2000px)";})();// 拖拽缩放事件scaleCur.onmousedown = function(event) {event.stopPropagation();let scaleWidth = scale.clientWidth;let scaleHeight = scale.clientHeight;let orignX = event.clientX;let orignY = event.clientY;document.onmousemove = function(event) {let nowX = event.clientX;let nowY = event.clientY;scale.style.width = `${scaleWidth - (orignX - nowX)}px`;scale.style.height = `${scaleHeight - (orignY - nowY)}px`;container.innerHTML = "";//清空上一次创建的图片init();//重新绘制图片}document.onmouseup = function(event) {document.onmousemove = null;document.onmouseup = null;}return false;}// 拖拽旋转事件container.onmousedown = function(event) {event.stopPropagation();let transformStr = this.style.transform;let re = /(?<=\()[\s\S]+(?=deg)/g; //正则匹配表达式,匹配transform中的rotate3d中的值let m = transformStr.match(re)[0].split(",");let [rotateX,rotateY,rotateZ,rotateAngle] = m;//保存元素初始rotate3d值let orignX = event.clientX;let orignY = event.clientY;document.onmousemove = function(event) {let nowX = event.clientX;let nowY = event.clientY;let x = orignY - nowY;let y = nowX - orignX;       let dec = Math.sqrt(Math.pow(y,2) + Math.pow(x,2));container.style.transform = `rotate3d(${Number(rotateX)+x},${Number(rotateY)+y},0,${(Number(rotateAngle)+dec)%360}deg)`;}document.onmouseup = function () {document.onmousemove = null;document.onmouseup = null;}return false;//阻止浏览器默认事件}}
</script>

项目地址

GitHub链接: frontEnd合集
其中的3Dperspective文件就是啦

使用JS和CSS实现图片的3D透视效果及动画相关推荐

  1. 以Jar形式为Web项目提供资源文件(JS、CSS与图片)

    一.背景 二.分析 1.把我需要的JS.CSS与图片等资源copy到Web工程中. 2.通过程序采用流的方式读取Jar中的资源流再输出到页面流. 三.分析结果 四.核心代码开发(Jar端) 1.org ...

  2. html图片轮播怎么写,用js和CSS写图片切换效果(轮播图)

    用js和CSS写图片切换效果(轮播图). ** 学习前提** 了解CSS伪类元素,css3过度效果 对js拥有基础的了解. 清楚图片切换原理. CSS3轮播图 body{ background:#cc ...

  3. 用CSS实现图片的3D凹凸感(即:凸出镜框外或凹陷镜框里)

    Ⅰ.问题描述: 使用css实现图片的3D凹凸感: Ⅱ实现过程如下: 1.展示结果为: A.正常的图片(图一.图二都正常): B.图一凸出镜框外,图二正常: 触发过程:将鼠标放在图一的红色边框内,就会显 ...

  4. html凹凸效果,用CSS实现图片的3D凹凸感(凸出镜框外或凹陷镜框里)

    Ⅰ.问题描述: 使用css实现图片的3D凹凸感: Ⅱ实现过程如下: 1.展示结果为: A.正常的图片(图一.图二都正常): B.图一凸出镜框外,图二正常: 触发过程:将鼠标放在图一的红色边框内,就会显 ...

  5. css实现图片的3d旋转

    今天的内容是,用css实现图片的3d旋转效果,效果如下: 由于不是视频上传不是很熟悉,所以用图片来简单解释,上述的图片效果,但是图片会绕着一个中心点旋转,像一个圆柱体一样. 下面是具体代码,如果有需要 ...

  6. CSS 实现图片旋转和水波纹动画效果

    CSS 实现图片旋转和水波纹动画效果 背景 通过 CSS 动画实现图片旋转和水波纹动画效果,并做成 Vue 组件,方便以后复用. 代码 <template><view class=& ...

  7. css实现图片的3d旋转-照片墙

    一.效果图 二.图片摆放 1.html 这里准备了1个section和7个div,7个div都要求定位在父元素section那里(都在中心点),每个div各一张图,上面效果图有1张在中间的,其余6张图 ...

  8. 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题

    通常把jsp页面放在webRoot的/WEB-INF下可以防止访问者直接输入页面. 而webRoot的/WEB-INF下的页面是受保护的,用户无法通过形如http://localhost:8080/t ...

  9. 拜托,使用 Three.js 让二维图片具有 3D 效果超酷的

    前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 逛 sk ...

  10. js和CSS实现图片旋转

    需求大概是,鼠标移入,头像正向旋转,鼠标移除,头像逆向回转.分别用了CSS动画还有JS实现,但是JS给我感觉会好点,因为我希望实现的是鼠标进入,获取当前旋转角度,正向加旋,鼠标移除,获取当前角度,逆向 ...

最新文章

  1. 【ICLR2022】分布外泛化的不确定性建模
  2. JavaFX 之窗口大小自由拉伸(四)
  3. 《高性能Linux服务器构建实战》——2.1节初识Varnish
  4. Django框架深入了解_03(DRF之认证组件、权限组件、频率组件、token)
  5. python websocket模块_python websocket学习使用
  6. java发送http跨域_跨域发送HTTP请求详解
  7. Atitit.biz业务系统 面向框架  面向模式---------数据映射imp
  8. oracle字典在线查字手写,在线字典手写输入
  9. 数据库常见面试题(附答案)
  10. 高斯核原理详解+生成高斯核的Python代码
  11. html自我介绍5页模板,关于个人自我介绍模板6篇
  12. matlab学习笔记 struct函数
  13. 阿尔伯塔大学知名计算机工程学教授,阿尔伯塔大学计算机工程硕士解析
  14. 创建Image图像的几种方法
  15. vcf文件格式详细解释
  16. js实现数组扁平化的6种方法
  17. 盒子模型(Box Model)
  18. SAE助力南瓜电影7天内全面Severless
  19. 什么是对称正定矩阵?
  20. 【技术整合】各技术解决方案与对应解决的问题

热门文章

  1. 第二门课 改善深层神经网络:超参数调试、正则化以及优化(Improving Deep Neural Networks:Hyperparameter tuning…)
  2. MYSQL中linux的前戏
  3. 3-11 查询水果价格
  4. 列车停车控制算法及仿真研究
  5. 飞机地铁的java项目怎么做_个人项目-地铁出行路线规划(Java代码实现)
  6. 易基因 - 外泌体let-7d-3p和miR-30d-5p作为宫颈癌及其癌前病变无创筛查的诊断标志物|早期筛查
  7. Sematic-UI安装方法:
  8. 计算机室教师使用制度,[最新]教师计算机室管理制度
  9. 单片机c语言案例教程,单片机C语言案例教程教学指南.doc
  10. 常用手持设备的use-agent头信息