轮播图制作-仿网易云音乐

 

*目标*

1.实现自动播放。

2.实现左右翻页。

3.实现小圆点的变化:每张图片下面对应一个小圆点,播放到哪张图片,该图片对应的小圆点就变成红色。

4.通过点击下面的小圆点,实现播放对应的图片。

*思路*

1.首先将需要轮播的图片放在数组里,通过设置变量currentIndex,来记录当前播放的是第几张图片。

2.实现小圆点更新:通过获取当前currentIndex。通过for循环遍历每一个小圆点,如果小圆点的位置等于currentIndex,那么就修改小圆点的颜色为红色,否则为灰色。

3.实现自动播放:通过currentIndex++来实现遍历每一张图片,当currentIndex等于图片数量时,要将currentIndex设置成0,重新进入遍历。这里我们可以通过setInterval函数来实现不断调用函数,来实现对currentIndex的遍历。

4.实现左右翻页:对点击按钮添加事件监听器,当点击翻页按钮时,通过对currentIndex加一减一操作实现图片的左右翻页效果,需要注意的是当currentIndex等于图片数量时,要执行currentIndex等于0操作,当currentIndex等于0时,要执行currentIndex等于图片数量减一的操作,以此实现图片的循环播放。

5.点击小圆点实现图片切换:通过for循环监听每一个小圆点,当监听到对应的小圆点被点击时,更新图片以及小圆点颜色。

6.为了避免左右点击事件和自动轮播造成事件上的冲突,还需要一个停止自动播放和一个继续自动播放的函数。

*具体代码实现(js):*

/*小圆点 */

let updateDotStyles=(index) =>{

 let dots = sliderDot.getElementsByTagName('a');

 for (var i = 0; i < dots.length; i++) {

  dots[i].style.backgroundImage = i === index ? "url('../images/red.png')" : "url('../images/grey.png')";

 }

}

// 停止自动播放的函数

function stopAutoPlay() {

 clearInterval(timerId);

}

 

// 继续自动播放的函数

function startAutoPlay() {

 timerId = setInterval(auto_select, 5000);

}

let select=(index)=>{

 stopAutoPlay();

 index=Number(index);

 if(index>links.length){

  return;

 }

 if(currentIndex==index){

  return;

 }

 currentIndex=index;

 sliderPicture.setAttribute('src',links[currentIndex].url)

 sliderBG.style.backgroundImage = 'url(' + links_BG[currentIndex].url + ')'

 updateDotStyles(currentIndex);

 startAutoPlay();

}

let bind= () =>{

 //左翻页事件监听

 sliderLeftbtn.addEventListener('click',()=>{

  let index=currentIndex-1;

  if(index<0){

   index=links.length-1;

  }

  select(index);

  updateDotStyles(index);

 })

 //右翻页事件监听

 sliderRightbtn.addEventListener('click',()=>{

  let index=currentIndex+1;

  if(index>=links.length){

   index=0;

  }

  select(index);

  updateDotStyles(index);

 })

 //点击小圆点

 let dots = sliderDot.getElementsByTagName('a');

 for (let i = 0; i < dots.length; i++) {

  dots[i].addEventListener('click', () => {

   select(i);

   updateDotStyles(i);

  });

 }

}

/*自动播放*/

let auto_select= () =>{

 let index=currentIndex;

 if(index>=links.length){

  index=0;

 }

 sliderBG.style.backgroundImage = 'url(' + links_BG[index].url + ')';

 sliderPicture.setAttribute('src',links[index].url);

 updateDotStyles(index);

 index++;

 currentIndex=index;

 console.log(index);

}

let timerId;

document.addEventListener('DOMContentLoaded', () => {

 updateDotStyles(currentIndex);

 timerId = setInterval(auto_select, 5000);

 bind();

});

Vue仿网易云立体轮播图的实现可以通过以下步骤来完成: 1. 创建Vue组件:首先,创建一个Vue组件,用于包裹轮播图的内容。 2. 数据准备:在Vue组件中,准备好需要展示的轮播图数据,例如图片地址、标题等。 3. 使用v-for指令:在Vue组件的模板中,使用v-for指令遍历轮播图数据,生成对应的轮播项。 4. 样式设计:为轮播项添加样式,实现立体效果。可以使用CSS的transform属性来实现3D旋转效果,例如使用rotateY()函数来实现水平旋转。 5. 添加动画效果:使用Vue的过渡动画功能,为轮播项添加切换动画效果。可以使用transition组件和动态的CSS类来实现。 6. 实现自动播放:使用Vue的定时器功能,设置一个定时器来自动切换轮播项。 下面是一个简单的示例代码,演示了如何使用Vue实现仿网易云立体轮播图: ```html <template> <div class="carousel"> <transition-group name="carousel-item" tag="div"> <div v-for="(item, index) in carouselItems" :key="index" class="carousel-item"> <img :src="item.imageUrl" alt="carousel-image" class="carousel-image"> <div class="carousel-title">{{ item.title }}</div> </div> </transition-group> </div> </template> <script> export default { data() { return { carouselItems: [ { imageUrl: 'image1.jpg', title: 'Image 1' }, { imageUrl: 'image2.jpg', title: 'Image 2' }, { imageUrl: 'image3.jpg', title: 'Image 3' }, ], }; }, mounted() { setInterval(this.nextSlide, 3000); }, methods: { nextSlide() { // 切换到下一张轮播图 // 可以在这里实现切换动画效果 // 更新carouselItems数组中的索引值即可 }, }, }; </script> <style> .carousel { width: 100%; height: 300px; perspective: 1000px; } .carousel-item { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transform-style: preserve-3d; transition: transform 0.5s; } .carousel-item img { width: 100%; height: 100%; object-fit: cover; } .carousel-title { position: absolute; bottom: 20px; left: 20px; color: white; font-size: 18px; } .carousel-item-enter-active, .carousel-item-leave-active { transition: transform 0.5s; } .carousel-item-enter { transform: rotateY(90deg); } .carousel-item-leave-to { transform: rotateY(-90deg); } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值