新闻中心 网络推广 网站建设 优化推广 首页>新闻>网站建设

完整的SWIPER支持视频轮播的代码

时间:2025-09-13   访问量:0

以下是完整的一个代码,并测试了安卓,鸿蒙,IOS系统都可以播放。

 <div class="swiper-container index-banner">
    <div class="swiper-wrapper">
      {hmcms:list num=10  scode=60 order='sorting asc,id desc'}
       {hmcms:if('[list:enclosure drophtml=1 lencn=5]'>'')}  
       <div class="swiper-slide" >
            <video class="video" src="[list:enclosure]"  
             muted 
             autoplay 
             playsinline 
              webkit-playsinline 
             x5-playsinline 
             preload="auto"
             poster="[list:ico]"
             ></video>
               <div class="container">
                  <div class="position-absolute text-light text-center px-3" style="top:30%;">
                      <h1 class="fs-18 wow slideInUp fweight mb-4">[list:title]</h1>
                      <h2 class="fs-16 wow slideInUp mb-4">[list:subtitle]</h2>
                      <h3 class="fs-14 fs-sm-18 wow slideInUp">[list:content]</h3>
                  </div>
              </div>
          </div>
           {else}
           <div class="swiper-slide" >
            <a href="[list:outlink]">
              <img src="[list:ico]" class="d-block w-100" >
            </a>
              <div class="container">
                <div class="position-absolute text-light text-center px-3" style="top:30%;">
                <h1 class="fs-18 wow slideInUp fweight mb-4">[list:title]</h1>
                <h2 class="fs-16 wow slideInUp mb-4">[list:subtitle]</h2>
                <h3 class="fs-14 fs-sm-18 wow slideInUp">[list:content]</h3>
                </div>
            </div>
          </div>
              {/hmcms:if}
   {/hmcms:list}
    </div>
    <div class="swiper-button-prev d-none d-md-block"></div>
    <div class="swiper-button-next d-none d-md-block"></div>
    <div class="swiper-pagination"></div>
 
</div>
 
 
<script>
var mySwiper = new Swiper('.index-banner', {
  direction: 'horizontal',
  loop: true,
  speed: 1500,
  // 关闭 swiper 的 autoplay,使用视频结束来切换
  pagination: { el: '.swiper-pagination', clickable: true },
  navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev' },
  on: {
    init: function () {
      playCurrentVideo(this);
    },
    // 等切换动画结束后再播放(避免动画中找不到 active)
    slideChangeTransitionEnd: function () {
      playCurrentVideo(this);
    }
  }
});

// 播放当前 activity 的视频,暂停其它并清理事件处理器
function playCurrentVideo(swiperInstance) {
  // 先暂停所有视频并清理 onended(避免重复触发)
  document.querySelectorAll('.swiper-slide video').forEach(function(v){
    try { v.pause(); } catch(e){}
    try { v.onended = null; } catch(e){}
  });

  // 取当前 active slide(兼容 loop 后的克隆)
  var currentSlide = document.querySelector('.swiper-slide-active');
  if (!currentSlide) return;

  var currentVideo = currentSlide.querySelector('video');
  if (currentVideo) {
    // 用 onended 属性绑定(覆盖旧的处理器,避免多次绑定)
    currentVideo.onended = function() {
      // 切到下一页(Swiper 会触发 slideChangeTransitionEnd,从而播放下一个视频)
      swiperInstance.slideNext();
    };

    // 触发播放(在微信/QQ 等也许被拦截,先尝试)
    currentVideo.play().catch(function(err){
      // 被浏览器拦截(例如微信需要手势),打印以便调试
      console.log('video.play() 被拦截或出错:', err);
    });
  } else {
    // 不是视频(比如图片),设置一个简单的停留时间后切换(可按需调整)
    setTimeout(function() {
      swiperInstance.slideNext();
    }, 3000);
  }
}

// 兼容微信/QQ 内核:在 JSBridgeReady 或首次触摸时,尝试播放当前视频
function playCurrentOnWeixin() {
  var active = document.querySelector('.swiper-slide-active');
  if (!active) return;
  var v = active.querySelector('video');
  if (v) {
    v.play().catch(function(err){
      console.log('微信/QQ play 被拦截:', err);
    });
  }
}
document.addEventListener("WeixinJSBridgeReady", function(){ playCurrentOnWeixin(); }, false);
document.addEventListener("touchstart", function(){ playCurrentOnWeixin(); }, { once: true });
</script>


另外推荐一个PC端的轮播视频,:https://www.jq22.com/jquery-info20585

但是代码最好修改一下,以下是我修改后更实用一点的。

<link rel="stylesheet" type="text/css" href="/static/css/style.css">
<div class='o-sliderContainer d-none d-md-block' id="pbSliderWrap0" style="margin:0; background:none!important;">
  <div class='o-slider' id='pbSlider0' style="background:none!important; opacity: 1; position: relative;">
   {hmcms:list num=5 scode=60 order='sorting asc,id desc'} 
      {hmcms:if('[list:enclosure drophtml=1 lencn=5]'>'')}  
    <div class="o-slider--item" style="background: url([list:ico]) center center; background-size: cover;">      
       <video class='video' autoplay muted loop poster="[list:ico]" >
          <source src="[list:enclosure]" type="video/mp4">
        </video>
        <div class="o-slider-textWrap">
          <div class="container">
               <div class="position-absolute container text-light text-center" style="top:30%;">
                <h1 class="fs-30 fs-sm-60 wow slideInUp fweight mb-5">[list:title]</h1>
                <h2 class="fs-18 fs-sm-24 wow slideInUp mb-5">[list:subtitle]</h2>
                <h3 class="fs-16 fs-sm-18 wow slideInUp">[list:content]</h3>
                </div>
            </div>
        </div>
    </div>
      {else}
        <div class="o-slider--item" >          
               <img src="[list:ico]" class="w-100" alt="">        
             <div class="index-bannertxt">
              <div class="container">
                    <div class="text-light text-center"  >
                    <h1 class="fs-30 fs-sm-60 wow slideInUp fweight mb-5">[list:title]</h1>
                    <h2 class="fs-18 fs-sm-24 wow slideInUp mb-5">[list:subtitle]</h2>
                    <h3 class="fs-16 fs-sm-18 wow slideInUp">[list:content]</h3>
                    </div>
                </div>
            </div>
      </div> 
     {/hmcms:if}
   {/hmcms:list}
 
  </div>

</div>


以下是引用JS,自己修改路径。
<script src='/static/js/hammer.min.js'></script>
<script src='/static/js/slider.js'></script>
<script>
  $('#pbSlider0').pbTouchSlider({
    slider_Wrap: '#pbSliderWrap0',
    slider_Threshold: 10,
    slider_Speed:600,
    slider_Ease:'ease-out',
    slider_Drag : true,//拖动
    auto:true,//是否自动滚动
    autoTime:6000,//设置图片自动时间
    slider_Arrows: {
      enabled : true//箭头
    },
    slider_Dots: {//显示点不
      class :'.o-slider-pagination',
      enabled : true,
      preview : false
    },
    
  });
</script>

以下是修改过的CSS样式:

@-webkit-keyframes ball-scale-multiple {
  0% {
    transform: scale(0) rotate(-90deg);
    opacity: 0;
  }
  5% {
    opacity: 1;
  }
  100% {
    transform: scale(1.2) rotate(90deg);
    opacity: 0;
  }
}
@keyframes ball-scale-multiple {
  0% {
    transform: scale(0) rotate(-90deg);
    opacity: 0;
  }
  5% {
    opacity: 1;
  }
  100% {
    transform: scale(1.2) rotate(90deg);
    opacity: 0;
  }
}
 
.loaderWrap {
  position: absolute;
  left: 0;
  top: 0;
  right: 0;
  bottom: 0; 
  z-index: 123333333;
}

 
.ball-scale-multiple {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, 50%);
}
.video{
	width: 100%;
  height: 100%;
  object-fit: cover;
   display: block; /* 加上这句可消除默认的 inline 间隙 */
}
 
.ball-scale-multiple > div {
  
  border-radius: 0;
  animation-fill-mode: both;
  position: absolute;
  left: -60px;
  top: -60px;
  opacity: 0;
  margin: 0;
  width: 120px;
  height: 120px;
  animation: ball-scale-multiple 1s 0s linear infinite;
   
}
 
.ball-scale-multiple > div:nth-child(1) {
  animation-delay: -1s;
}
 
.ball-scale-multiple > div:nth-child(2) {
  animation-delay: -0.8s;
}
 
.ball-scale-multiple > div:nth-child(3) {
  animation-delay: -0.6s;
}
 
.ball-scale-multiple > div:nth-child(4) {
  animation-delay: -0.4s;
}
 
.ball-scale-multiple > div:nth-child(5) {
  animation-delay: -0.2s;
}

 
.a-container {
  width: 1170px;
  margin: 20px auto;
}

 
.a-1_2 {
  width: 48%;
  display: inline-block;
  margin: 0 1%;
}


 
.o-sliderContainer {
  overflow: hidden;
  position: relative;
  width: 100%;
  min-height: 200px; 
  float: left;
  margin: 30px 0;
  height: 1080px
}
 
.o-sliderContainer.hasShadow {
  box-shadow: 0 39px 22px -29px rgba(0, 0, 0, 0.2);
}
 
.o-sliderContainer:hover .o-slider-next {
  right: 20px;
}
 
.o-sliderContainer:hover .o-slider-prev {
  left: 20px;
}

 
.o-slider--item {
  height: 100%;
  width: 0;
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
  position: relative;
  float: left;
  transition: all 0.2s cubic-bezier(0.7, 0.18, 0.53, 0.75);
  opacity: 1; 
  transform-origin: center center;
  z-index: 99;
  overflow: hidden;
}
 
.o-slider--item::after {
  content: '';
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;  
  z-index: 0;
  height: 100%;
}

.o-slider--item img{
   width: 100%;
   height: 100%;
   object-fit: cover;
}

.index-bannertxt{
   display: block;
   width: 100%;
   position: absolute;
   left:0;
   top:30%;
   z-index: 999;
   height: auto;
}

 
.o-slider--item.isActive {
  opacity: 1; 
  background: none;
}
 
.o-slider--item.isMoving {
  opacity: 1; 
  z-index: 100;
}

 
.o-slider {
  width: auto;
  position: relative;
  display: none;
}
 
.o-slider.isVisible {
  display: table; 
}
 
.o-slider.isDraggable {
  cursor: move;
}

 
.o-slider-textWrap {
  left: 2%;
  bottom: 45px;
  height: auto;
  position: absolute;
  text-align: left;
  padding:0;
  width: 100%;
  transition: all 0.4s;
  opacity: 1;
  overflow: visible;
  perspective: 1000px;
  z-index: 2;
}

 
.isActive .o-slider-textWrap::after {
  width: 100%;
  left: 0;
}
 
.isActive .o-slider-paragraph {
  opacity: 1;
  transform: perspective(0) rotateY(0) translate(0, 0);
  transform-origin: 0 0;
  transition-delay: 1s;
}
 
.isActive .o-slider-title {
  opacity: 1;
  transform: perspective(0) rotateY(0) translate(0, 0);
  transform-origin: 0 0;
  transition-delay: 0.2s;
}
 
.isActive .o-slider-subTitle {
  opacity: 1;
  transform: perspective(0) rotateY(0) translate(0, 0);
  transform-origin: 0 0;
  transition-delay: 0.6s;
}

 
.o-slider-title {
  width: auto;
  margin: 0 0 5px 0;
  height: auto;
  color: #fff;
  text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);
  font-size: 1.4rem;
  display: inline-block;
  padding: 0;
  transition: all 0.4s;
  transform-origin: 0 0;
  transform: perspective(1000px) rotateY(120deg) translate(100px, -100px);
  opacity: 0;
  position: relative;
  z-index: 1;
}

 
.o-slider-subTitle {
  width: auto;
  margin: 0 0 5px 0;
  height: auto;
  color: #fff;
  text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);
  font-size: 1.4rem;
  display: inline-block;
  padding: 0;
  transition: all 0.4s;
  transform-origin: 0 0;
  transform: perspective(1000px) rotateY(120deg) translate(100px, -100px);
  opacity: 0;
  position: relative;
  z-index: 1;
  font-size: 1.2rem;
}

 
.o-slider-paragraph {
  width: auto;
  margin: 0 0 5px 0;
  height: auto;
  color: #fff;
  text-shadow: 2px 2px 2px rgba(0, 0, 0, 0.2);
  font-size: 1.4rem;
  display: inline-block;
  padding: 0;
  transition: all 0.4s;
  transform-origin: 0 0;
  transform: perspective(1000px) rotateY(120deg) translate(100px, -100px);
  opacity: 0;
  position: relative;
  z-index: 1;
  font-size: 0.8rem;
  max-width: 100%;
  display: none;
}


 







@media screen and (min-width: 768px) {
 
  .o-slider-textWrap {
    left: 5%;
    width: 90%;
  }

 
  .o-slider-title {
    font-size: 1.8rem;
  }

 
  .o-slider-subTitle {
    font-size: 1.4rem;
  }

 
  .o-slider-paragraph {
    max-width: 60%;
    font-size: 1rem;
    display: block;
  }
}
@media screen and (min-width: 1024px) {
 
  .o-slider-pagination {
    bottom: 6%;
  }

 
  .o-slider-textWrap {
    left: 0px;
    width: 100%;
    top:00px;
  }

 
  .o-slider-title {
    font-size: 2rem;
  }

 
  .o-slider-subTitle {
    font-size: 1.6rem;
  }

  
  .o-slider-paragraph {
    max-width: 40%;
    font-size: 1.2rem;
  }
}
 
.a-divider {
  display: block;
  width: 100%;
  height: 1px;
  margin: 2px 0;

}

 
.o-slider-controls {
  display: none;
}
 
.o-slider-controls.isVisible {
  display: block;
}

 
.o-slider-pagination {
  bottom: 2%;
  left: 0;
  position: absolute;
  text-align: left;
  width: 100%;
  z-index: 1444000;
  margin: 0; 
  padding: 0;
   padding-left: 20px;
}
 
.o-slider-pagination > li { 
	border-radius:5px;
  overflow: hidden;
  border:none;
  display: inline-block;
  position: relative;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  height: 5px;
  width: 50px;
  margin-left: 10px;
  margin-right:10px;
  transition: all 250ms;
  cursor: pointer;
  background-clip: padding-box;
  z-index: 100;
  background: rgba(255,255,255,0.5); 
}
.nobg .jinDU{
    display: none!important;
} 
 
.isActive .jinDU{
  display:block!important;
}
 
.o-slider--preview {
  position: absolute;
  top: -70px;
  right: auto;
  bottom: auto;
  left: -65px;
  opacity: 0;
  width: 140px;
  height: 60px;
  background-size: cover;
  background-position: center center;
  transition: all 250ms;
  z-index: -1;
  border: 3px solid #000;
  transform: scale(0.2, 0.2);
  transform-origin: center bottom;
  display: none;
}
 
.o-slider--preview::before {
  content: "";
  position: absolute;
  top: auto;
  right: auto;
  bottom: -13px;
  left: 50%;
  margin: 0 0 0 -5px;
  height: 0;
  width: 0;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  border-top: 10px solid #000;
}

 
.o-slider--preview.isActive,
.o-slider-pagination li:hover .o-slider--preview {
  opacity: 1;
  position: absolute;
  top: -76px;
  right: auto;
  bottom: auto;
  left: -65px;
  transform: scale(1, 1);
}

@media screen and (min-width: 768px) {
 
  .o-slider--preview {
    display: block;
  }
}
 
.o-slider-arrows {
  margin: 0;
  list-style: none;
  display: block;
}
 
.o-slider-next,
.o-slider-prev { 
    border-radius: 50%;
    background: rgba(255,255,255,0);
    position: absolute;
    left: 20px;
    top: 45%;
    margin-top: -35px;
    width: 50px;
    height: 50px;
    z-index: 999;
    opacity: 1;
}


.o-slider-next i,
.o-slider-prev i {
  position: absolute;
  top: 50%;
  left: 0;
  margin: -12px 0 0;
  text-align: center;
  width: 100%;
  font-size: 1.8rem;
  color: #fff;
}

 
.o-slider-next {
  left: auto;
  right: 20px;
}
 
.isDisabled {
  opacity: 0.1;
  cursor: auto;
}
@media screen and (max-width: 1920px) {
  .o-sliderContainer {
    height: 100vh;    
  }
}

@media screen and (max-width: 1800px) {
  .o-sliderContainer {
    height: 80vh;    
  }
}


@media screen and (max-width: 1280px) {
 
  .a-container {
    width: 970px;
  }
}
@media screen and (max-width: 1024px) {
  
  .o-slider-arrows {
    display: none;
  }

 
  .o-sliderContainer {
    height: 450px;
    width: 100%;
    margin: 0 0 50px 0;
  }
 
  .o-slider--item {
    height: 450px;
  }
}
@media screen and (max-width: 768px) {
 
  .a-container {
    width: 90%;
    margin: 20px auto;
  }

 
  .a-1_2 {
    width: 100%;
    display: block;
    margin: 0;
  }

 
  .o-slider-arrows {
    display: none;
  }
 
  .o-sliderContainer {
    height: 350px;
  }

 
  .o-slider--item {
    height: 350px;
  }

 
  .o-slider-panel img {
    left: -15%;
    width: 130%;
  }
}
@media screen and (max-width: 480px) {
 
  .o-slider--item {
    height: 270px;
  }
 
  .o-slider--item img {
    left: -20%;
    width: 140%;
  }

 
  .o-sliderContainer {
    height: 270px;
  }
}


上一篇:网站后台增加自定义表单提醒功能。

下一篇:没有了!

服务咨询
1对1咨询,专业客服为您解疑答惑
联系销售
15899750475
在线咨询
联系在线客服,为您解答所有的疑问
ARE YOU INTERESTED IN ?
感兴趣吗?

有关我们服务的更多信息,请联系项目经理

15899750475 杨先生