js实现旋转木马效果
发布时间 - 2026-01-11 00:14:10 点击率:次效果图:
代码如下:
<html class=" js csstransforms3d" lang="zh"><head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS3 3D transforms-旋转木马</title>
<link rel="stylesheet" type="text/css" href="http://www.htmleaf.com/pins/1412/201502062108/css/style.css" rel="external nofollow" >
<style media="screen">
.container {
width: 210px;
height: 140px;
position: relative;
margin: 50px auto 40px;
border: 1px solid #CCC;
-webkit-perspective: 1100px;
-moz-perspective: 1100px;
-o-perspective: 1100px;
perspective: 1100px;
}
#carousel {
width: 100%;
height: 100%;
position: absolute;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.ready #carousel {
-webkit-transition: -webkit-transform 1s;
-moz-transition: -moz-transform 1s;
-o-transition: -o-transform 1s;
transition: transform 1s;
}
#carousel.panels-backface-invisible figure {
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-o-backface-visibility: hidden;
backface-visibility: hidden;
}
#carousel figure {
display: block;
position: absolute;
width: 186px;
height: 116px;
left: 10px;
top: 10px;
border: 2px solid black;
line-height: 116px;
font-size: 80px;
font-weight: bold;
color: white;
text-align: center;
}
.ready #carousel figure {
-webkit-transition: opacity 1s, -webkit-transform 1s;
-moz-transition: opacity 1s, -moz-transform 1s;
-o-transition: opacity 1s, -o-transform 1s;
transition: opacity 1s, transform 1s;
}
#options{
margin-top: 200px;
width: 100%;
text-align: center;
}
#options button{padding: 0.5em 1.5em;border: 2px solid #6699cc;background: #fff;}
</style>
<!--[if IE]>
<script src="http://libs.useso.com/js/html5shiv/3.7/html5shiv.min.js"></script>
<![endif]-->
</head>
<section class="container">
<div id="carousel" style="transform: translateZ(-286px) rotateY(0deg);">
<figure style="opacity: 1; background-color: rgba(255, 0, 0, 0.8); transform: rotateY(0deg) translateZ(286px);">1</figure>
<figure style="opacity: 1; background-color: rgba(255, 170, 0, 0.8); transform: rotateY(40deg) translateZ(286px);">2</figure>
<figure style="opacity: 1; background-color: rgba(169, 255, 0, 0.8); transform: rotateY(80deg) translateZ(286px);">3</figure>
<figure style="opacity: 1; background-color: rgba(0, 255, 0, 0.8); transform: rotateY(120deg) translateZ(286px);">4</figure>
<figure style="opacity: 1; background-color: rgba(0, 255, 169, 0.8); transform: rotateY(160deg) translateZ(286px);">5</figure>
<figure style="opacity: 1; background-color: rgba(0, 169, 255, 0.8); transform: rotateY(200deg) translateZ(286px);">6</figure>
<figure style="opacity: 1; background-color: rgba(0, 0, 255, 0.8); transform: rotateY(240deg) translateZ(286px);">7</figure>
<figure style="opacity: 1; background-color: rgba(170, 0, 255, 0.8); transform: rotateY(280deg) translateZ(286px);">8</figure>
<figure style="opacity: 1; background-color: rgba(255, 0, 169, 0.8); transform: rotateY(320deg) translateZ(286px);">9</figure>
<figure style="opacity: 0; transform: none;">10</figure>
<figure style="opacity: 0; transform: none;">11</figure>
<figure style="opacity: 0; transform: none;">12</figure>
<figure style="opacity: 0; transform: none;">13</figure>
<figure style="opacity: 0; transform: none;">14</figure>
<figure style="opacity: 0; transform: none;">15</figure>
<figure style="opacity: 0; transform: none;">16</figure>
<figure style="opacity: 0; transform: none;">17</figure>
<figure style="opacity: 0; transform: none;">18</figure>
<figure style="opacity: 0; transform: none;">19</figure>
<figure style="opacity: 0; transform: none;">20</figure>
</div>
</section>
<section id="options">
<p>
<label for="panel-count">个数</label>
<input id="panel-count" value="9" min="3" max="20" type="range">
<span class=" range-display"></span></p>
<p id="navigation">
<button id="previous" data-increment="-1">上一页</button>
<button id="next" data-increment="1">下一页</button>
</p>
<p>
<button id="toggle-axis">横竖切换</button>
</p>
<p>
<button id="toggle-backface-visibility">背面可见切换</button>
</p>
</section>
</div>
<script src="http://www.htmleaf.com/pins/1412/201502062108/js/utils.js"></script>
<script>
var transformProp = Modernizr.prefixed('transform');
function Carousel3D ( el ) {
this.element = el;
this.rotation = 0;
this.panelCount = 0;
this.totalPanelCount = this.element.children.length;
this.theta = 0;
this.isHorizontal = true;
}
Carousel3D.prototype.modify = function() {
var panel, angle, i;
this.panelSize = this.element[ this.isHorizontal ? 'offsetWidth' : 'offsetHeight' ];
this.rotateFn = this.isHorizontal ? 'rotateY' : 'rotateX';
this.theta = 360 / this.panelCount;
// do some trig to figure out how big the carousel
// is in 3D space
this.radius = Math.round( ( this.panelSize / 2) / Math.tan( Math.PI / this.panelCount ) );
for ( i = 0; i < this.panelCount; i++ ) {
panel = this.element.children[i];
angle = this.theta * i;
panel.style.opacity = 1;
panel.style.backgroundColor = 'hsla(' + angle + ', 100%, 50%, 0.8)';
// rotate panel, then push it out in 3D space
panel.style[ transformProp ] = this.rotateFn + '(' + angle + 'deg) translateZ(' + this.radius + 'px)';
}
// hide other panels
for ( ; i < this.totalPanelCount; i++ ) {
panel = this.element.children[i];
panel.style.opacity = 0;
panel.style[ transformProp ] = 'none';
}
// adjust rotation so panels are always flat
this.rotation = Math.round( this.rotation / this.theta ) * this.theta;
this.transform();
};
Carousel3D.prototype.transform = function() {
// push the carousel back in 3D space,
// and rotate it
this.element.style[ transformProp ] = 'translateZ(-' + this.radius + 'px) ' + this.rotateFn + '(' + this.rotation + 'deg)';
};
var init = function() {
var carousel = new Carousel3D( document.getElementById('carousel') ),
panelCountInput = document.getElementById('panel-count'),
axisButton = document.getElementById('toggle-axis'),
navButtons = document.querySelectorAll('#navigation button'),
onNavButtonClick = function( event ){
var increment = parseInt( event.target.getAttribute('data-increment') );
carousel.rotation += carousel.theta * increment * -1;
carousel.transform();
};
// populate on startup
carousel.panelCount = parseInt( panelCountInput.value, 10);
carousel.modify();
axisButton.addEventListener( 'click', function(){
carousel.isHorizontal = !carousel.isHorizontal;
carousel.modify();
}, false);
panelCountInput.addEventListener( 'change', function( event ) {
carousel.panelCount = event.target.value;
carousel.modify();
}, false);
for (var i=0; i < 2; i++) {
navButtons[i].addEventListener( 'click', onNavButtonClick, false);
}
document.getElementById('toggle-backface-visibility').addEventListener( 'click', function(){
carousel.element.toggleClassName('panels-backface-invisible');
}, false);
setTimeout( function(){
document.body.addClassName('ready');
}, 0);
};
window.addEventListener( 'DOMContentLoaded', init, false);
</script>
<p id="disclaimer">对不起,你的浏览器不支持CSS 3D transforms。</p>
</body></html>
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js实现旋转木马
# js旋转木马效果
# 旋转木马效果
# JS实现旋转木马轮播案例
# js轮播图之旋转木马效果
# JavaScript实现旋转木马轮播图
# js实现旋转木马轮播图效果
# JS实现旋转木马轮播图
# 原生js实现旋转木马轮播图效果
# JS实现旋转木马式图片轮播效果
# 原生JS实现旋转木马式图片轮播插件
# 原生js实现旋转木马效果
# 下一页
# 上一页
# 不支持
# preserve
# transition
# ready
# absolute
# transform
# visibility
# hidden
# display
# figure
# panels
# backface
# invisible
# border
# solid
# margin
# auto
# CCC
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
如何快速选择适合个人网站的云服务器配置?
如何在IIS服务器上快速部署高效网站?
奇安信“盘古石”团队突破 iOS 26.1 提权
java中使用zxing批量生成二维码立牌
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
详解阿里云nginx服务器多站点的配置
焦点电影公司作品,电影焦点结局是什么?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
如何确认建站备案号应放置的具体位置?
Laravel如何使用.env文件管理环境变量?(最佳实践)
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
制作电商网页,电商供应链怎么做?
Java垃圾回收器的方法和原理总结
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
bootstrap日历插件datetimepicker使用方法
Linux安全能力提升路径_长期防护思维说明【指导】
C++时间戳转换成日期时间的步骤和示例代码
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel如何实现模型的全局作用域?(Global Scope示例)
googleplay官方入口在哪里_Google Play官方商店快速入口指南
网站图片在线制作软件,怎么在图片上做链接?
EditPlus 正则表达式 实战(3)
微信公众帐号开发教程之图文消息全攻略
南京网站制作费用,南京远驱官方网站?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
个人网站制作流程图片大全,个人网站如何注销?
如何在腾讯云免费申请建站?
JavaScript如何操作视频_媒体API怎么控制播放
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Python文本处理实践_日志清洗解析【指导】
Java遍历集合的三种方式
PHP 500报错的快速解决方法
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何在宝塔面板中修改默认建站目录?
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
QQ浏览器网页版登录入口 个人中心在线进入
如何撰写建站申请书?关键要点有哪些?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Android利用动画实现背景逐渐变暗
如何快速搭建高效简练网站?
jQuery validate插件功能与用法详解
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践

