>웹 프론트엔드 >CSS 튜토리얼 >간단한 3D 행성 모션 효과 예제 코드를 생성하는 CSS3와 JS

간단한 3D 행성 모션 효과 예제 코드를 생성하는 CSS3와 JS

高洛峰
高洛峰원래의
2017-02-11 13:39:221332검색

이 글에서는 간단한 3D 행성 모션 효과 예제 코드를 만들기 위한 CSS3 plus js를 주로 소개합니다. 효과가 매우 멋지네요.

얼마 전 정원에서 CSS3D 행성의 움직임에 대한 기사를 보고 이 효과가 너무 멋있다고 생각해서 무심코 사용해 보았습니다. 플러그인을 사용하기에는 너무 게으른 관계로 네이티브 JS로 작성하여 효과가 다소 거칠고, 잘 처리되지 않은 부분이 있었으면 좋은 제안이 있으면 메시지를 남겨주세요. 알려주세요. 정말 감사합니다. 좋아요, 더 이상 고민하지 말고 코드가 아래에 첨부되어 있습니다.

HTML 부분

<p>
        </p><p>
            </p><p></p>  
            <p></p>
            <p></p>
            <p></p>
            <p></p>
            <p></p>

            <p></p>
            <p></p>
            <p></p>

            <p></p>
            <p></p>
            <p></p>
    
            <!-- 卫星 -->
            <p>
                </p><p>
                    </p><p></p>
                    <p></p>
                    <p></p>
                    <p></p>
                    <p></p>
                    <p></p>

                    <p></p>
                    <p></p>
                    <p></p>

                    <p></p>
                    <p></p>
                    <p></p>
                
            
        
    

여기서는 p의 처음 세 가지 범주를 사용하여 각 행성의 x, y 및 z를 그립니다. y축과 z축이며, 이들 행성은 중첩될 수 있습니다. 즉, 위의 코드와 같이 내부 행성은 외부 행성의 위성입니다.

css 부분

.path-Saturn, .path-earth, .path-Venus, .path-Neptune, .path-Jupiter, .path-Mercury, .path-satellite, .path-moon{
    position: absolute;
    width: 95%;
    height: 95%;
    top: 2.5%;
    left: 2.5%;
    border: 1px solid #ddd;
    border-radius: 50%;
    transform: rotateX(60deg);
    transform-style: preserve-3d;
}
#sun, #earth, #Saturn, #Venus, #Neptune, #Jupiter, #Mercury, #satellite, #moon{
    width: 160px;
    height: 160px;
    position: absolute;
    transform-style: preserve-3d;
    top: 50%;
    left: 50%;
    margin: -80px 0 0 -80px;
    animation: rotateForward 10s linear infinite;
    cursor: pointer;
    transform: translateZ(-80px);
}
/*x, y, z轴*/
.x, .y, .z{  
    position: absolute;
    height: 100%;
    border: 1px solid #999;
    left: 50%;
    margin-left: -1px;
}
.y{
    transform: rotateZ(90deg);
}
.z{
    transform: rotateX(90deg);
}
@keyframes  rotateForward {
    0%{
        transform: rotate3d(1, 1, 1, 0deg);
    }
    100%{
        transform: rotate3d(1, 1, 1, -360deg);
    }
}
/*Saturn*/
#Saturn{
    width: 80px;
    height: 80px;
    left: 0%;
    margin: -40px 0 0 -40px;
    animation: rotateForward 4s linear infinite;
    transform: translateZ(-40px);
}
#Saturn .space{
    width: 80px;
    height: 80px;
    box-shadow: 0 0 60px rgba(90, 80, 53, 1);
    background-color: rgba(90, 80, 53, .3);
}
#Saturn .space-x1, #Saturn .space-x2, #Saturn .space-y1, #Saturn .space-y2, #Saturn .space-z1, #Saturn .space-z2{
    width: 87.5%;
    height: 87.5%;
    top: 6.25%;
    left: 6.25%;
    transform: rotate3d(0, 0, 0, 0deg) translateZ(20px);
}
#Saturn .space-x1{
    transform: rotate3d(0, 0, 0, 0deg) translateZ(-20px);
}
#Saturn .space-y{
    transform: rotate3d(0, 1, 0, 90deg) translateZ(0px);
}
#Saturn .space-y1{
    transform: rotate3d(0, 1, 0, 90deg) translateZ(-20px);
}
#Saturn .space-y2{
    transform: rotate3d(0, 1, 0, 90deg) translateZ(20px);
}
#Saturn .space-z{
    transform: rotate3d(1, 0, 0, 90deg) translateZ(0px);
}
#Saturn .space-z1{
    transform: rotate3d(1, 0, 0, 90deg) translateZ(-20px);
}
#Saturn .space-z2{
    transform: rotate3d(1, 0, 0, 90deg) translateZ(20px);
}

주로 9개의 면을 사용하여 다양한 회전과 번역을 통해 구를 구성합니다. 그리고 여기에는 호환코드가 적혀있지 않기 때문에 소스코드를 다운로드 받고 싶은 친구들은 크롬 브라우저로 열어보도록 하세요. 여기에 언급해야 할 몇 가지 CSS3 속성이 있습니다:

1. 변환 스타일: 보존-3d는 3D 효과에서 이 속성이 설정된 컨테이너의 하위 요소를 표시하는 데 사용됩니다.

2. 변환 원점: 회전된 요소의 회전 및 이동의 기준점 위치를 설정합니다.

3. 관점: 요소가 보이는 뷰를 설정합니다.

JS파트

(function(planetObj, TimeArr, judgeDirec) {
    //检测参数是否规范
    var timeRegexp = /^[1-9][0-9]*$/,
        direcRegexp = /^[01]$/;
    function checkArgs (arg, ele, regexp) {
        if(arg){
            $(arg).each(function (i, item) {
                if(arg.length != planetObj.length || !regexp.test(item)){
                    throw Error('an error occured');
                    return;
                }else{
                    return arg;
                }
            })
        }else{
            arg = [];
            for(var i = 0; i <p></p><p>플래닛 무브먼트를 구현할 때 잘 처리되지 않는 곳도 있는데, Let the 일정 시간 동안 행성의 왼쪽 위치가 변경된 후 타원 공식에 따라 상단의 값을 계산합니다. 타원이 고르지 않기 때문에 최고 값이 고르지 않게 변하기 때문에 행성의 움직임이 빠르고 느리게 보이게 됩니다. </p><p> 그리고 여기서 또 주목해야 할 것이 있는데, 바로 Math.sqrt() 메소드로 추출한 값이 모두 양수인데, 행성이 원을 그리려면 궤적의 왼쪽과 오른쪽 끝을 동적으로 조정해야 합니다. Math.sqrt() 메서드에서 생성된 값의 양수와 음수를 변경합니다. </p><p>아래에 렌더링 첨부</p><p><img alt="간단한 3D 행성 모션 효과 예제 코드를 생성하는 CSS3와 JS" src="https://img.php.cn/upload/article/000/000/013/76e74c3adf658959e8d478e32a10501b-0.png"    style="max-width:90%"  style="max-width:90%" title="간단한 3D 행성 모션 효과 예제 코드를 생성하는 CSS3와 JS"></p><p>위 내용은 모두의 학습에 도움이 되기를 바라며, 모두에게 도움이 되기를 바랍니다. PHP를 지원합니다. </p><p>간단한 3D 행성 모션 효과 예제 코드를 만들기 위한 CSS3 및 js 관련 기사를 더 보려면 PHP 중국어 웹사이트를 주목하세요! </p>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.