JS结合CSS3实现卡牌左右切换动画效果

作者:像素漫游时间:2026-10-22 05:34:19浏览:530

本文介绍如何利用CSS3过渡属性与JavaScript逻辑配合,实现无需增删DOM节点的卡牌左右切换效果。通过动态修改元素类名来改变绝对定位样式,结合0.6秒过渡动画,达成中间突出、两侧缩放的视觉体验,支持PC点击与移动端滑动操作。

卡牌切换效果概述

在游戏应用中,常可见到卡牌左右切换的交互设计,其中居中卡片最为醒目,通过左滑或右滑即可切换至下一张。本文将演示如何借助CSS3技术复现这一视觉效果。

示例Demo展示

首先展示一个示例Demo,具体样式细节可根据实际需求自行调整:

卡牌切换效果概述

(PC端可通过点击按钮进行切换,移动端支持左右滑动操作)

DOM操作与原理分析

观察效果可知,共有5个div元素支持左右切换,每次切换时必有一个元素位于中间显眼位置展示。虽然视觉上看似元素发生了位移及DOM节点的增删,但检查元素结构会发现,DOM节点实际位置并未改变,仅是通过切换每个元素绑定的class,从而实现了页面布局的视觉变化。

核心原理在于避免DOM节点的频繁增删,而是为每个固定位置的div预设特定样式。所有div均采用绝对定位,通过样式的轮播切换实现动画效果。每次切换过程包含0.6s的过渡动画:

CSS过渡动画定义


-webkit-transition: all 0.6s;
transition: all 0.6s;

类名切换逻辑详解

例如,从左至右的class依次为item_0、item_1、item_cur、item_3、item_4,每个class定义了当前所在div的定位方式。当执行左滑操作时,右侧的div移动至中间位置,此时class从左至右的顺序变更为item_1、item_cur、item_3、item_4、item_0。

JavaScript切换函数实现


var egg_change = function(type){
 var $demo = $('.demo'),
  index = parseInt( $demo.attr('index_cur')||2 ),
  $item = $('.demo .item'),
  len = $item.length;

 if( type=='left' ){
  index = (index+1)%len;
 }else{
  index = (index-1+len)%len;
 }
 $demo.attr('index_cur', index);

 $item.removeClass('item_0 item_1 item_3 item_4 item_cur');
 
 $item.eq( (index-2+len)%len ).addClass('item_0');
 $item.eq( (index-1+len)%len ).addClass('item_1');
 $item.eq(index).addClass('item_cur');
 $item.eq( (index+1)%len ).addClass('item_3');
 $item.eq( (index+2)%len ).addClass('item_4');
}

以上内容为本文的全部讲解,希望能为各位的学习提供有益帮助,同时也欢迎大家继续支持本站。

作者最新文章