图片/图形

CSS3+JS炫酷3D拖拽卡片动画特效

阿里云


这是一款使用 CSS3 和纯 JavaScript 制作的炫酷 3D 卡片拖拽特效。用户可以通过鼠标拖拽卡片,卡片在拖拽的过程中会发生 3D 变形,并且带有音效,效果非常炫酷。由于 IE 浏览器不支持 transform-style: preserve-3d;属性,所以该特效在 IE 浏览器中没有效果。

HTML 结构

该特效使用一个<div>作为容器,里面放置需要进行拖拽的卡片图片。

也想出现在这里?联系我们
创客主机
  1. <div class="card">
  2.   <img src="img/hearthstone-ragnaros.png" class="card-image" draggable="false">
  3. </div>

CSS 样式

该卡片拖拽特效中使用了自定义的鼠标光标,要自定义鼠标光标的样式,可以在 body 元素中通过 cursor 属性来设置。

  1. body {
  2.   background: #66677c;
  3.   cursor: url(../img/hearthstone-cursor.png) 10 2, auto;
  4.   overflow: hidden;
  5. }
  6. body:active {
  7.   cursor: url(../img/hearthstone-click.png) 10 2, auto;
  8. }

卡片容器使用绝对定位,开始时位于视口的左上角位置。它被设置了固定的宽度 250 像素。并将它制作为 3D 透视空间,透视的为 400 像素。will-change 属性用于告诉浏览器优化即将执行的 transform 动画。user-select 属性用于禁止优化选择文本。user-drag 属性用于设置元素不能被拖动,在选中它后才以拖拽。

  1. .card {
  2.   left: 0;
  3.   top: 0;
  4.   -webkit-perspective: 400px;
  5.                perspective: 400px;
  6.   position: absolute;
  7.   -webkit-transform-style: preserve-3d;
  8.                transform-style: preserve-3d;
  9.   will-change: transform;
  10.   width: 250px;
  11.  
  12.   -webkit-user-select: none;
  13.       -moz-user-select: none;
  14.         -ms-user-select: none;
  15.                user-select: none;
  16.  
  17.   -webkit-user-drag: none;
  18.                user-drag: none;
  19. }

卡片被鼠标按下后光标变为拳头状。

  1. .card:active {
  2.   cursor: url(../img/hearthstone-grab.png) 10 2, auto;
  3. }

容器中的卡片图片的设置和容器相同。

  1. .card-image {
  2.   display: block;
  3.   pointer-events: none;
  4.   -webkit-transform-style: preserve-3d;
  5.               transform-style: preserve-3d;
  6.   width: 100%;
  7.   will-change: transform;
  8.   user-drag: none;
  9.   -webkit-user-select: none;
  10.     -moz-user-select: none;
  11.       -ms-user-select: none;
  12.              user-select: none;
  13.  
  14.   -webkit-user-drag: none;
  15.   user-drag: none;
  16. }

JavaScript

特效中使用 JavaScript 来处理优化和卡片的交互。由于不考虑在 IE 浏览器中使用该特效的情况,JS 代码中使用 DOM2 级事件处理程序 addEventListener 来监听事件。主要为卡片和浏览器窗口绑定了下面的一些事件:

  1. function bindevents() {
  2.   card.addEventListener( 'mousedown', onmousedown );
  3.   window.addEventListener( 'mouseup', onmouseup );
  4.   window.addEventListener( 'mousemove', onmousemove );
  5.   window.addEventListener( 'resize', onresize );
  6. }

完整的 JavaScript 实现代码请参考下载文件。

CSS3+JS 炫酷 3D 拖拽卡片动画特效

已有 488 人购买
  • sy7g
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!