十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
下面详细解释都在源码中:
创新互联公司服务项目包括孝南网站建设、孝南网站制作、孝南网页制作以及孝南网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,孝南网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到孝南省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
!doctype htmlhtmlheadmeta charset="utf-8"title无标题文档/titlestyle#canvas{ background:#eee;}/style/headbodycanvas id='canvas' width="500" height='500'/canvasscriptwindow.onload=function(){ var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); //平移,主要是将坐标轴平移到中间,为了画圆定位方便 context.translate(250,250); //定义焦距 var fos = 300; //存放小球的数组 var arr = []; for(var i = 0 ; i 8 ; i++){ var arcObj = { //半径,用随机数目的是让每个小球大小不一 r:10+5*Math.random(), //起始X坐标 x:-200+i*30, //起始Y坐标 y:-100+200*Math.random(), //起始Z坐标,这里需要理解,我们要构造的是一个三维立体小球的运动 //则X,Y轴不能表达空间感,你需要充分的想象Z坐标轴是顺着你的眼睛的就是Z轴 z:i*10, //小球的运行速度 speed:20 } arr.push(arcObj); } setInterval(function(){ //清除画布,每次画之前先将上次的清除掉.然后绘出本次的,就可以形成动画效果. context.clearRect(-250,-250,500,500); //将arr排序,sort()的参数则是作为一种比较规则 var newArr = arr.sort(function (a,b){ return a.z b.z }); //循环绘出刚才定义的几个小球 for(var i = 0 ; i newArr.length ; i++){ //z轴的变化,每次变化都是 速度*时间+z = z;由于speed未定义单位,则时间可忽略 arr[i].z += arr[i].speed; //让小球来回弹跳 if(arr[i].z 600 || arr[i].z -50){ arr[i].speed *= -1; } //这里的缩放比例,一定要注意,你要想象你眼前有个球垂直从远处飞来,逐渐变大的过程,Z轴不断增加.焦距就想象成从最初你到球的距离,通过运动后,现在到球的距离和焦距就可以形成缩放比例. var scales = fos/(fos+arr[i].z); var x1 = arr[i].x*scales; var y1 = arr[i].y*scales; //保存之前的context绘图环境,即后续可以用context.restore方法可以恢复, //目的是让下面的context变化不影响其他的画图样式. context.save(); //平移X,Y 也可以不用平移X,Y只要在下面的画圆中定义相应的X,Y也能达到相同的目的 context.translate(x1,y1); //将坐标轴缩放,目的是让小球的大小发生视觉上的变化. context.scale(scales,scales); context.beginPath(); //定义放射性颜色渐变 var colorObj = context.createRadialGradient(0,0,0,0,0,arr[i].r); colorObj.addColorStop(0,'#cbc0f3'); colorObj.addColorStop(1,'#06198b'); context.fillStyle=colorObj; context.arc(0,0,arr[i].r,0,Math.PI*2); context.fill(); context.restore(); } },50);}/script/body/html
主要要理解焦距的概念,实际开发过程中,可能X轴,Y轴都有小球的运动速度分量,那才能在运动的过程中转弯,撞墙等特效.
可以呀,html5 和 webgl 技术都可以用于三维可bai视化开发。
Hightopo 提供了一套独特的 WebGL 层抽象,将 Model–View–Presenter (MVP) 的设计模型延伸应用到了 3D 图形领域。
HT是由图扑软件 独立自主研发的,基于HTML5技术标准的前端2D、3D图形开发框架。其提供了从SDK的API组件库到2D 、3D编辑器到矢量图标和三维模型资源库,构成一站式的数据可视化解决方案。
可搜索 图扑软件 申请试用!
更多资料
图扑软件(Hightopo)是由厦门图扑软件科技有限公司独立自主研发,基于HTML5标准技术的Web前端2D和3D图形界面开发框架。非常适用于实时监控系统的界面呈现,广泛应用于电信网络拓扑和设备管理,以及电力、燃气等工业自动化 (HMI/SCADA) 领域。
多年来数百个工业互联网可视化项目实施经验形成了一整套实践证明的高效开发流程和生态体系,可快速实现现代化的、高性能的、跨平台桌面Mouse/移动Touch/虚拟现实VR图形展示效果及交互体验。
CSS3除了为开发者提供二维变形之外,还将动画从二维平面推动到了三维立体状态,能够实现真正的三维特效。
三维变形和二维变形一样,均使用的是transform属性。想要触发三维变形有两种方式:一种方式是通过语法告知浏览器“请采用三维方式进行变形处理”,另一种方式是直接使用CSS3三维变形的语法。
触发方法1:告知浏览器变形方式
-webkit-transform-style:preserve-3d;
Tips:IE不支持三维变形,在移动端,绝大多数的浏览器均为WebKit内核,因此,在此句代码之前需要书写-webkit-的前缀内核。
Tips:不要为body元素设置-webkit- transform-style: preserve 3d,否则会对position:fixed定位的元素造成布局影响。在开发当中,如果当前元素属于body的子级元素,又希望应用三维变形,则在body和当前元素之间多嵌套一层结构,并为这层元素应用三维变形即可。
触发方法2:直接使用CSS3变形语法
!DOCTYPE html
head
meta charset="UTF-8"
title言成科技/title
style
.box1 {
width: 150px;
height: 150px;
border: 2px solid blue;
}
.box1 div {
height: 150px;
background: rgba(0, 0, 0, 0.5);
-webkit-transform: translate3d(30px, 60px, 20px) rotateX(30deg);
transform: translate3d(30px, 60px, 20px) rotateX(30deg);
}
/style
/head
body
div class="box1"
div/div
/div
/body
/html
具体三维变形的具体属性详见《CSS3-3D相关知识详解—视角以及变形方向》
3D效果制作
需求
制作一个立方体,并进行旋转
代码实例
!DOCTYPE HTML
html
head
meta charset="utf-8" /
title言成科技/title
link rel="stylesheet" type="text/css" href="" /
style
.main-bac { -webkit-perspective:1500; } /*设定透视距离*/
.main{
width:200px;
height:200px;
margin: 0 auto;
position:relative;
-webkit-transform-style:preserve-3d;
-webkit-transition:-webkit-transform 2s ease 0s;/*过渡时间*/
}
/*基本样式*/
.main p{
position: absolute;
margin: 0;
padding: 0;
width: 200px;
height: 200px;
text-align: center;
line-height: 200px;
font-size: 26px;
opacity:0.5;
}
/*将第一个元素Z轴向前移动100px,形成第一个面(正面)*/
.main p:nth-of-type(1) {
background-color:red;
-webkit-transform:translateZ(100px);
}
/*将第一个元素Z轴向前移动100px,绕x轴旋转90度形成上面的面*/
.main p:nth-of-type(2) {
background-color:orange;
-webkit-transform:rotateX(90deg) translateZ(100px);
}
/*将第一个元素Z轴向前移动100px,绕x轴旋转-90度形成下边的面*/
.main p:nth-of-type(3) {
background-color:yellow;
-webkit-transform:rotateX(-90deg) translateZ(100px);
}
/*将第一个元素Z轴向前移动100px,绕y轴旋转90度形成右侧的面*/
.main p:nth-of-type(4) {
background-color:green;
-webkit-transform:rotateY(90deg) translateZ(100px);
}
/*将第一个元素Z轴向前移动100px,绕y轴旋转-90度形成左侧的面*/
.main p:nth-of-type(5) {
background-color:#b435bf;
-webkit-transform:rotateY(-90deg) translateZ(100px);
}
/*将第一个元素Z轴向前移动100px,绕y轴旋转180度形成后面(背面)*/
.main p:nth-of-type(6) {
background-color:blue;
-webkit-transform:rotateY(180deg) translateZ(100px);
}
/*鼠标移入时绕Y轴旋转180度,绕Z轴旋转180度*/
.main:hover {-webkit-transform:rotateY(180deg) rotateZ(180deg); }
/style
/head
body
div class="main-bac"
div class="main"
p言成科技/p
p3D立方体/p
pHTML5学堂/p
p3D立方体/p
p码匠/p
pJavaScript/p
/div
/div
/body
/html
代码解析
当鼠标移入的时候,立方体逐渐的发生旋转(非突变),围绕X轴旋转45度的同时,围绕Y轴旋转45度。
当鼠标移出立方体时,立方体恢复到初始状态。在最开始状态时,并没有采用无限远的视角,设置一定的视角,让刚开始时直视立方体时,不会觉得是一个平面。
3D效果制作-目标效果图
以上资料来源:《HTML5布局之路》
html5中引入3d模型的方法是借助第三方PlayCanvas插件来完成的。
比如可以用以下方法实现图片的360度旋转:
代码示例:
var render, loop, t, dt, //定义变量
DEG2RAD = Math.PI / 180, //角度转弧度
cvs = document.querySelector('canvas'), //创建canvas
ctx = cvs.getContext('2d'),//绘制2d图形上下文
teddy = new Image(), //创建图像
heart = new Image(), //创建图像中心
angle = 0,//初始化角度为0
reqAnimFrame =
window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.msRequestAnimationFrame ||
window.oRequestAnimationFrame;
//创建动画帧
cvs.width = 400;
cvs.height = 200;
teddy.src = 'xxx.jpg';
heart.src = 'yyy.jpg';
//开始渲染
render = function (timestamp) {
dt = timestamp - t;
t = timestamp;
// cavas设置为白色
ctx.fillStyle = "rgb(255,255,255)";
ctx.fillRect(0, 0, cvs.width, cvs.height);
// 绘制中心
ctx.drawImage(heart, -20, -120);
// 绘制teddy
ctx.save();
ctx.translate(cvs.width/2, cvs.height/2); // 移动鼠标到画布中心
ctx.rotate(DEG2RAD * angle); // 旋转画布
ctx.drawImage(teddy, -teddy.width/2, -teddy.height/2); // 绘制中心图片
angle += dt / 16.67 * 6; // increment angle ~ 360 deg/sec
ctx.restore();
};
loop = function (timestamp) {
reqAnimFrame(loop);
render(timestamp);
};
t = Date.now();
loop(t);
三维导入?HTML5本身不支持 不过现在有很多基于javascript+Canvas的图形库,可以做网页的三维效果
效果稍微差点的是使用HTML5的Canvas提供的API去做的三维效果
有的是基于例如Chrome等浏览器支持的WebGL做的,效果和速度都会好些
具体可以搜一下Three.js 这个库里面就有现成的三维模型导入的JS文件
HTML5(WEB前端)的技术组成
HTML5(WEB前端)技术由HTML(结构)、CSS(样式)、JavaScript(行为)组成。
如何理解结构、样式与行为
简单来说,HTML5(WEB前端)是“将设计图转换为用户查看的网页”所需要的技术。
结构实现的是网页中的标题、列表、图片等标签。
样式处理的是标题文字的字体大小、颜色,图片尺寸,某个标签的背景等。
行为可以实现网页中的时间,电商网站当中的倒计时效果,在注册表单时用户名是否重复的检测,网站当中顶部图片的切换特效等等。
简单的理解结构样式和行为:将网页看做一个装修好的功能完备的房子,那么结构实现的是房间以及家具的位置布局,样式则是针对房间进行装饰,行为是为房间添加“开门”等功能。