自制人物卡片轮播组件,自动轮播,点击切换
来源:互联网 发布:手机日历软件 编辑:程序博客网 时间:2024/05/22 03:30
由于工作需要,写了一个人物卡片轮播的组件,卡片内容包括照片,姓名及介绍。要求人物个数大于等于五张,设置每次只显示五张卡片,点击后方的卡片时该卡片会跳到最中间显示。不点击时自动轮播。效果如上。
其实总的逻辑非常简单,大体的思路就是改变class属性。设置需要显示的五个卡片的class为 info-1,...,info-5。不显示的卡片则为 info-none。
通过点击更换显示卡片索引,根据显示卡片索引给它以及它左右两个卡片添加class属性 info-#{index},并将其他卡片设为 info-none 即可。
我之前最困惑的地方在于如何做出翻转的特效,差点就要手撕一个3d坐标转换的方法了。。还好得知 css3 有一个很溜的属性 transform,包含了一些现成的动画方法,例如 translate, scale,rotate,功能非常强大,建议查阅文档,动手尝试一番。本组件主要用到的是 translate3d 以及 scale3d。具体见代码。
基本功能都差不多实现了,只需要再利用 setInterval 和 clearInterval 设置定时操作,来实现自动轮播即可。注意,每次鼠标点击选择后,需要清空时间,重新计时。
代码的话,我是用的 vue 框架,逻辑部分的用的是 coffeescript,需要看JS的话就,emmmmm,去 coffeescript官网 可以自动转为JS (其实都差不多辣,逃
<template> <div class="card-block"> <ul class="card-list"> <li class="card-info" v-for="card in cardInfo" :value="$index"> <img :src="card.img"/> <h5>{{ card.title }}</h5> <p>{{ card.content }}</p> </li> </ul> </div></template><script lang="coffee"> module.exports = props: # 理论上卡片数量需要大于等于五张 cardInfo: type: Array default: [] # 是否自动轮播 autoDisplay: type: Boolean default: true data: -> # 卡片总数 cardTotal: 5 # 显示卡片数 displayCardNum: 5 # 当前卡片下标 currentCard: 2 # 用于设置自动轮播时间 autoChangeTimer: -1 methods: # 初始化 InitCardDisplay: -> for i in [0 .. 4] $('.card-list').find("li[value$='#{i}']").addClass "info-#{i+1}" for i in [5 .. @cardTotal - 1] $('.card-list').find("li[value$='#{i}']").addClass "info-none" @setAutoChange() # 当 currentCard 更换时调用 changeCard: -> for i in [0 .. @cardTotal - 1] for j in [1 .. 5] $('.card-list').find("li[value$='#{i}']").removeClass "info-#{j}" $('.card-list').find("li[value$='#{i}']").addClass "info-none" leftCardId = @currentCard - 2 rightCardId = @currentCard + 2 index = 1 for i in [leftCardId .. rightCardId] i = (i + @cardTotal) % @cardTotal $('.card-list').find("li[value$='#{i}']").removeClass "info-none" $('.card-list').find("li[value$='#{i}']").addClass "info-#{index}" index += 1 @setAutoChange() # 设置自动轮播 setAutoChange: -> if !@autoDisplay return @clearAutoChange() @autoChangeTimer = setInterval => @currentCard = (@currentCard + 1) % @cardTotal @changeCard() , 3000 # 清除自动轮播 clearAutoChange: -> clearInterval @autoChangeTimer @autoChangeTimer = -1 ready: -> @cardTotal = @cardInfo.length @InitCardDisplay() @setAutoChange() vm = @ $('.card-list').on 'click', 'li', -> vm.currentCard = $(this).val() vm.clearAutoChange() vm.changeCard()</script><style lang="less">.card-block { width: 400px; position: relative; margin: 10px auto; .card-list { padding: 0px; position: relative; z-index: 100; height: 375px; width: 100%; margin: 20px auto; .card-info { -webkit-transition: all 0.6s; transition: all 0.6s; background-color: white; position: absolute; border: 1px solid #C4C0BB; list-style-type: none; text-align: center; width: 300px; height: 375px; padding: 20px 25px; img { border-radius: 50%; border: 1px solid #C4C0BB; height: 100px; width: 100px; } h5 { margin: 15px 0; } p { font-size: 10px; } } .info-1 { left: 0; z-index: 100; filter: blur(2px); -webkit-transform: translate3d(-104%, 12%, 0) scale3d(0.5, 0.5, 1); transform: translate3d(-104%, 12%, 0) scale3d(0.5, 0.5, 1) } .info-2 { left: 100px; z-index: 110; filter: blur(1px); -webkit-transform: translate3d(-81%, 9%, 0) scale3d(0.7, 0.7, 1); transform: translate3d(-81%, 9%, 0) scale3d(0.7, 0.7, 1); } .info-3 { left: 200px; z-index: 120; -webkit-transform: translate3d(-50%, 0, 0); transform: translate3d(-50%, 0, 0); } .info-4 { left: 300px; z-index: 110; filter: blur(1px); -webkit-transform: translate3d(-20%, 9%, 0) scale3d(0.7, 0.7, 1); transform: translate3d(-20%, 9%, 0) scale3d(0.7, 0.7, 1); } .info-5 { left: 400px; z-index: 100; filter: blur(2px); -webkit-transform: translate3d(4%, 12%, 0) scale3d(0.5, 0.5, 1); transform: translate3d(4%, 12%, 0) scale3d(0.5, 0.5, 1) } .info-none { display: none; } }}</style>
阅读全文
0 0
- 自制人物卡片轮播组件,自动轮播,点击切换
- js点击轮播或者自动轮播图代码
- [UIScrollview 卡片式无限自动轮播]
- 图片轮播 自动轮播
- 图片轮播之自动轮播
- 自动轮播+无限轮播
- ViewPager 无限轮播 自动轮播
- ViewPager 无限轮播自动轮播
- js图片自动轮播切换代码
- 原生javascript实现图片自动轮播和点击轮播代码
- 自动轮播图
- 自动轮播
- 自动轮播条
- 自动轮播
- ViewPager自动轮播
- 自动轮播
- 自动轮播
- viewpage自动轮播
- ZooKeeper
- C# 将16进制的btye数组转换为字符串
- HDU
- 网络攻防——黛蛇蠕虫病毒
- odoo10普通视图添加自定义css和自定义js
- 自制人物卡片轮播组件,自动轮播,点击切换
- 解密长沙矿工挖矿软件抽水图文教程
- 读取txt,分类训练集和测试集
- CKG10-高性能高可用Yii2.0电商平台 仿京东商城 高级组件 MySQL LVS
- java的mvc模式
- 第十二周 项目(5)
- Spark RDD知识点汇总
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence 构造
- yaf--Hello World