我正在将我的网站升级为带有 Vue 的单页应用程序。我有一个以前运行的 JS 脚本,可以将几张图片设置为旋转以显示所选图片的立方体的面。但是,当我将所有内容都放在 Vue div 中时,代码停止工作。我相信这是因为 Vue 接管了渲染该 div 内所有内容的控制权,尽管我可能错了。
我的html:
<div id="app">
<!--top of page-->
<section id="options">
<div class="show-buttons" id="dropdown-buttons">
<button onclick="activeButton(0);activeButton2(0)" class="show-front active_project">Image1</button>
<button onclick="activeButton(1);activeButton2(1)" class="show-back">Image2</button>
<button onclick="activeButton(2);activeButton2(2)" class="show-right">Image3</button>
<button onclick="activeButton(3);activeButton2(3)" class="show-left">Image4</button>
<button onclick="activeButton(4);activeButton2(4)" class="show-top">Image5</button>
<button onclick="activeButton(5);activeButton2(5)" class="show-bottom">Image6</button>
<a href="javascript:void(0);" style="font-size:15px;" class="icon" onclick="responsiveButtons()">☰</a>
</div>
</section>
<section class="card-container">
<div id="card">
<figure id="project1" class="fadeIn active_description animated">
<p>Description1</p>
</figure>
<figure id="project2">
<p>Description2</p>
</figure>
<figure id="project3">
<p>Description3</p>
</figure>
<figure id="project4">
<p>Description4</p>
</figure>
<figure id="project5">
<p>Description5</p>
</figure>
<figure id="project6">
<p>Description6</p>
</figure>
</div>
</section>
<!--rest of page-->
</div>
Vue JS:
document.addEventListener("DOMContentLoaded", function() {
var app = new Vue({
el: '#app',
data: {
//data
},
methods: {
//methods
},
});
});
图片动画JS:
var descriptions = [
document.getElementById('project1'),
document.getElementById('project2'),
document.getElementById('project3'),
document.getElementById('project4'),
document.getElementById('project5'),
document.getElementById('project6'),
];
var projectButtons = [
document.getElementsByClassName('show-front'),
document.getElementsByClassName('show-back'),
document.getElementsByClassName('show-right'),
document.getElementsByClassName('show-left'),
document.getElementsByClassName('show-top'),
document.getElementsByClassName('show-bottom'),
];
function activeButton(num) {
document.getElementsByClassName('active_project')[0].classList.remove('active_project');
projectButtons[num][0].classList.add('active_project');
document.getElementsByClassName('active_description')[0].classList.remove('fadeIn');
document.getElementsByClassName('active_description')[0].classList.remove('animated');
document.getElementsByClassName('active_description')[0].classList.remove('active_description');
descriptions[num].classList.add('fadeIn'); // Add 'active' classnames to the current page
descriptions[num].classList.add('animated');
descriptions[num].classList.add('active_description');
}
var descriptions2 = [
document.getElementById('alt-project1'),
document.getElementById('alt-project2'),
document.getElementById('alt-project3'),
document.getElementById('alt-project4'),
document.getElementById('alt-project5'),
document.getElementById('alt-project6'),
];
function activeButton2(num) {
document.getElementsByClassName('alt_active_description')[0].classList.remove('fadeIn');
document.getElementsByClassName('alt_active_description')[0].classList.remove('animated');
document.getElementsByClassName('alt_active_description')[0].classList.remove('alt_active_description');
descriptions2[num].classList.add('fadeIn'); // Add 'active' classnames to the current page
descriptions2[num].classList.add('animated');
descriptions2[num].classList.add('alt_active_description');
}
function responsiveButtons() {
var x = document.getElementById("dropdown-buttons");
if (x.className === "show-buttons") {
x.className += " responsive";
} else {
x.className = "show-buttons";
}
}
var init = function() {
var box = document.querySelector('.cube-container').children[0],
showPanelButtons = document.querySelectorAll('#dropdown-buttons button'),
panelClassName = 'show-front',
onButtonClick = function( event ){
box.removeClassName( panelClassName );
panelClassName = event.target.className;
box.addClassName( panelClassName );
};
for (var i=0, len = showPanelButtons.length; i < len; i++) {
showPanelButtons[i].addEventListener( 'click', onButtonClick, false);
}
};
window.addEventListener( 'DOMContentLoaded', init, false);
CSS:
.cube-container {
width: 270px;
height: 180px;
-webkit-perspective: 2000px;
-moz-perspective: 2000px;
-o-perspective: 2000px;
perspective: 2000px;
}
#box .front,
#box .back {
width: 270px;
height: 180px;
}
#box .right,
#box .left {
width: 180px;
height: 180px;
left: 45px;
}
#box .top,
#box .bottom {
width: 270px;
height: 180px;
}
#frame {
width: 671px;
height: 445px;
}
#box .front {
-webkit-transform: translateZ( 90px);
-moz-transform: translateZ( 90px);
-o-transform: translateZ( 90px);
transform: translateZ( 90px);
}
#box .back {
-webkit-transform: rotateX( -180deg) translateZ( 90px);
-moz-transform: rotateX( -180deg) translateZ( 90px);
-o-transform: rotateX( -180deg) translateZ( 90px);
transform: rotateX( -180deg) translateZ( 90px);
}
#box .right {
-webkit-transform: rotateY( 90deg) translateZ( 135px);
-moz-transform: rotateY( 90deg) translateZ( 135px);
-o-transform: rotateY( 90deg) translateZ( 135px);
transform: rotateY( 90deg) translateZ( 135px);
}
#box .left {
-webkit-transform: rotateY( -90deg) translateZ( 135px);
-moz-transform: rotateY( -90deg) translateZ( 135px);
-o-transform: rotateY( -90deg) translateZ( 135px);
transform: rotateY( -90deg) translateZ( 135px);
}
#box .top {
-webkit-transform: rotateX( 90deg) translateZ( 90px);
-moz-transform: rotateX( 90deg) translateZ( 90px);
-o-transform: rotateX( 90deg) translateZ( 90px);
transform: rotateX( 90deg) translateZ( 90px);
}
#box .bottom {
-webkit-transform: rotateX( -90deg) translateZ( 90px);
-moz-transform: rotateX( -90deg) translateZ( 90px);
-o-transform: rotateX( -90deg) translateZ( 90px);
transform: rotateX( -90deg) translateZ( 90px);
}
#box.show-front {
-webkit-transform: translateZ( -90px);
-moz-transform: translateZ( -90px);
-o-transform: translateZ( -90px);
transform: translateZ( -90px);
}
#box.show-back {
-webkit-transform: translateZ( -90px) rotateX( -180deg);
-moz-transform: translateZ( -90px) rotateX( -180deg);
-o-transform: translateZ( -90px) rotateX( -180deg);
transform: translateZ( -90px) rotateX( -180deg);
}
#box.show-right {
-webkit-transform: translateZ( -135px) rotateY( -90deg);
-moz-transform: translateZ( -135px) rotateY( -90deg);
-o-transform: translateZ( -135px) rotateY( -90deg);
transform: translateZ( -135px) rotateY( -90deg);
}
#box.show-left {
-webkit-transform: translateZ( -135px) rotateY( 90deg);
-moz-transform: translateZ( -135px) rotateY( 90deg);
-o-transform: translateZ( -135px) rotateY( 90deg);
transform: translateZ( -135px) rotateY( 90deg);
}
#box.show-top {
-webkit-transform: translateZ( -90px) rotateX( -90deg);
-moz-transform: translateZ( -90px) rotateX( -90deg);
-o-transform: translateZ( -90px) rotateX( -90deg);
transform: translateZ( -90px) rotateX( -90deg);
}
#box.show-bottom {
-webkit-transform: translateZ( -90px) rotateX( 90deg);
-moz-transform: translateZ( -90px) rotateX( 90deg);
-o-transform: translateZ( -90px) rotateX( 90deg);
transform: translateZ( -90px) rotateX( 90deg);
}