CSS3 หมุนภาพเคลื่อนไหว


244
<img class="image" src="" alt="" width="120" height="120">

ไม่สามารถทำให้ภาพเคลื่อนไหวนี้ทำงานได้ควรหมุน 360 องศา

ฉันเดาว่ามีบางอย่างผิดปกติกับ CSS ด้านล่างเนื่องจากยังคงอยู่

.image {
    float: left;
    margin: 0 auto;
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin-top: -60px;
    margin-left: -60px;

    -webkit-animation-name: spin;
    -webkit-animation-duration: 4000ms;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-timing-function: linear;

    -moz-animation-name: spin;
    -moz-animation-duration: 4000ms;
    -moz-animation-iteration-count: infinite;
    -moz-animation-timing-function: linear;

    -ms-animation-name: spin;
    -ms-animation-duration: 4000ms;
    -ms-animation-iteration-count: infinite;
    -ms-animation-timing-function: linear;

    animation-name: spin;
    animation-duration: 4000ms;
    animation-iteration-count: infinite;
    animation-timing-function: linear;

    @-ms-keyframes spin { 
        from { 
            -ms-transform: rotate(0deg); 
        } to { 
            -ms-transform: rotate(360deg); 
        }
    }
    @-moz-keyframes spin { 
        from { 
            -moz-transform: rotate(0deg); 
        } to { 
            -moz-transform: rotate(360deg); 
        }
    }
    @-webkit-keyframes spin { 
        from { 
            -webkit-transform: rotate(0deg); 
        } to { 
            -webkit-transform: rotate(360deg); 
        }
    }
    @keyframes spin { 
        from { 
            transform: rotate(0deg); 
        } to { 
            transform: rotate(360deg); 
        }
    }
}

คำตอบ:


520

นี่คือการสาธิต CSS แอนิเมชันที่ถูกต้อง:

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin 4s linear infinite;
    -moz-animation:spin 4s linear infinite;
    animation:spin 4s linear infinite;
}
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }
<img class="image" src="http://i.stack.imgur.com/pC1Tv.jpg" alt="" width="120" height="120">


หมายเหตุบางประการเกี่ยวกับรหัสของคุณ:

  1. คุณซ้อนคีย์เฟรมภายใน.imageกฎและนั่นไม่ถูกต้อง
  2. float:left จะไม่ทำงานกับองค์ประกอบที่มีตำแหน่งแน่นอน
  3. ดูที่caniuse : IE10 ไม่ต้องการ-ms-คำนำหน้า

13
หากมีใครลองใช้วิธีนี้ในรหัสของตัวเอง: อย่าลืมส่วน @ ที่ด้านล่าง
Jack M.

สวัสดีฉันสามารถหยุดภาพเคลื่อนไหวการหมุนอินฟินิตี้หลังจาก 5 วินาทีได้ไหม?
นพ. Ashik

16
ฉันเกือบจะคายน้ำออกมาเมื่อฉันวิ่งอนิเมชั่น
Razgriz

" float:left won't work on absolutely positioned elements" มันจะย่อขนาดให้เล็กสุดแม้ว่าจะคล้ายกับสิ่งที่แสดง: บล็อกแบบอินไลน์
gregn3

32

ฉันมีภาพหมุนโดยใช้สิ่งเดียวกันกับคุณ:

.knoop1 img{
    position:absolute;
    width:114px;
    height:114px;
    top:400px;
    margin:0 auto;
    margin-left:-195px;
    z-index:0;

    -webkit-transition-duration: 0.8s;
    -moz-transition-duration: 0.8s;
    -o-transition-duration: 0.8s;
    transition-duration: 0.8s;

    -webkit-transition-property: -webkit-transform;
    -moz-transition-property: -moz-transform;
    -o-transition-property: -o-transform;
     transition-property: transform;

     overflow:hidden;
}

.knoop1:hover img{
    -webkit-transform:rotate(360deg);
    -moz-transform:rotate(360deg); 
    -o-transform:rotate(360deg);
}

1
เพิ่ม: transform:rotate(360deg);สำหรับ IE
Dusty

3
โปรดเลือกตัวอย่างท้องถิ่นผ่านลิงค์เว็บไซต์ที่ใช้งานไม่ได้
evolutionxbox

ลิงก์เสีย
Markus Bucher

30

เพื่อให้เกิดการหมุน 360 องศาและนี่คือวิธีการทำงาน

HTML:

<img class="image" src="your-image.png">

CSS:

.image {
    overflow: hidden;
    transition-duration: 0.8s;
    transition-property: transform;
}
.image:hover {
    transform: rotate(360deg);
    -webkit-transform: rotate(360deg);
}

คุณต้องวางเมาส์บนภาพและคุณจะได้เอฟเฟกต์การหมุน 360 องศา

PS: เพิ่ม-webkit-ส่วนขยายเพื่อให้สามารถทำงานกับ chrome และ webkit Browers อื่น ๆ คุณสามารถตรวจสอบซออัพเดทสำหรับ webkit ที่นี่


Fiddle ไม่ทำงาน oO ผู้ตรวจสอบ Chrome ไม่ชอบ CSS ของคุณโดยเฉพาะ "การแปลง" และ "การเปลี่ยนคุณสมบัติ" โอ้ที่รัก
สูงธรรมดาเพียง

1
เพื่อที่คุณจะต้องเพิ่ม-webkit-tranformมันให้ทำงาน นี่คือซอที่อัพเดท jsfiddle.net/sELBM/172 - @JustPlainHigh
Nitesh

1
2017: ตอนนี้ได้รับการสนับสนุนเป็นอย่างดีและเป็นวิธีที่ต้องการในการหมุนแบบไม่สิ้นสุด -webkit-ไม่จำเป็นต้องนำหน้าอีกต่อไปและสามารถลบออกได้อย่างปลอดภัย การสนับสนุนเบราว์เซอร์: caniuse.com/#search=transforms
Alph.Dev

2

หากคุณต้องการพลิกภาพคุณสามารถใช้มันได้

.image{
    width: 100%;
    -webkit-animation:spin 3s linear infinite;
    -moz-animation:spin 3s linear infinite;
    animation:spin 3s linear infinite;
}
@-moz-keyframes spin { 50% { -moz-transform: rotateY(90deg); } }
@-webkit-keyframes spin { 50% { -webkit-transform: rotateY(90deg); } }
@keyframes spin { 50% { -webkit-transform: rotateY(90deg); transform:rotateY(90deg); } }

0

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin 4s linear infinite;
    -moz-animation:spin 4s linear infinite;
    animation:spin 4s linear infinite;
}
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }
<img class="image" src="http://i.stack.imgur.com/pC1Tv.jpg" alt="" width="120" height="120">


0

ลองง่าย ๆ

 
 .btn-circle span {
     top: 0;
   
      position: absolute;
     font-size: 18px;
       text-align: center;
    text-decoration: none;
      -webkit-animation:spin 4s linear infinite;
    -moz-animation:spin 4s linear infinite;
    animation:spin 4s linear infinite;
}

.btn-circle span :hover {
 color :silver;
}


/* rotate 360 key for refresh btn */
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } 
 <button type="button" class="btn btn-success btn-circle" ><span class="glyphicon">&#x21bb;</span></button>


-6

ที่นี่จะช่วยคุณได้

ลิงค์ jsfiddle ด้านล่างจะช่วยให้คุณเข้าใจวิธีการหมุนภาพฉันใช้อันเดียวกันเพื่อหมุนหน้าปัดนาฬิกา

http://jsfiddle.net/xw89p/

var rotation = function (){
   $("#image").rotate({
      angle:0, 
      animateTo:360, 
      callback: rotation,
      easing: function (x,t,b,c,d){       
          return c*(t/d)+b;
      }
   });
}
rotation();

โดยที่: • t: เวลาปัจจุบัน

• b: ค่า begInnIng

• c: การเปลี่ยนแปลงค่า

• d: ระยะเวลา

• x: ไม่ได้ใช้

ไม่มีการผ่อนปรน (ผ่อนคลายเชิงเส้น): ฟังก์ชัน (x, t, b, c, d) {return b + (t / d) * c; }


2
ฉันจะ upvote คำตอบนี้ถ้าคุณให้ข้อมูลเพิ่มเติมเล็กน้อย (เช่นคุณทำในซอ) ฉันยังรู้สึกว่าคุณควรพูดถึงนี่เป็นปลั๊กอิน jQuery เพราะฉันทุกคนชอบ "ฉันไม่รู้ว่า jQuery สามารถทำเช่นนั้นได้ !!! ^ _ ^ ดูที่ซอโอ้รอ ... U_U"
เพียงแค่สูง

2
คำอธิบายของตัวแปร x, t, b, c, d (เหมือนกับที่คุณทำในซอ) และระบุอย่างชัดเจนว่าถึงแม้ว่ามันจะไม่ใช่โซลูชัน CSS ตามที่ร้องขอโดย OP แต่มันก็เป็นโซลูชันปลั๊กอิน jQuery ที่เรียบง่ายและมีประสิทธิภาพ: )
เพียงแค่ที่ราบสูง

3
downvoted OP ไม่ได้ร้องขอโซลูชัน Javascript โดยเฉพาะอย่างยิ่งไม่ใช่ปลั๊กอิน jQuery ยึดติดกับสิ่งที่ถูกถาม
TheCarver
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.