Bootstrap CSS/Javascript 仅用于轮播

Posted

技术标签:

【中文标题】Bootstrap CSS/Javascript 仅用于轮播【英文标题】:Bootstrap CSS/Javascript For Carousel Only 【发布时间】:2020-04-24 13:39:17 【问题描述】:

引导 CSS/javascript 仅用于轮播

目前使用带控件的轮播

https://getbootstrap.com/docs/4.0/components/carousel/

<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
    <div class="carousel-item active">
     <video controls="true">
      <source src="www.youtube.com/watch?v=3bGNuRtlqAQ" type="video/mp4" />
    </video>
    </div>
    <div class="carousel-item">
     <video controls="true">
       <source src="www.youtube.com/watch?v=3bGNuRtlqAQ" type="video/mp4" />
    </video>

    </div>
    <div class="carousel-item">
      <img class="d-block w-100" src="..." >
    </div>
  </div>
  <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

谁有这个功能的 CSS 代码和 Javascript 代码? (不想要整个文件,因为它会与我的主要 CSS 冲突)

【问题讨论】:

这个函数的Javascript代码是什么意思?你到底需要什么?请说得更具体些。 好的,所以目前我已经为我的页面实现了“引导轮播”,但它需要额外的 CSS 和 js 文件来运行它。但是如果我链接“Bootstrap CSS and JS”,它将与我的原始 CSS 文件冲突,并导致我一半的页面内容混乱 我不这么认为,因为你只对这个轮播使用引导类,它只会影响你的轮播样式,而不是你的其他硬编码 css 样式。除非您在自己的 css 文件中使用引导类命名。 只需将您的覆盖 css 放在引导 css 之后。您还可以获取这篇文章中提到的单独的 Bootstrap 代码:***.com/questions/23991987/…,其中提到了这个页面:getbootstrap.com/docs/3.4/customize 或单击 Bootstrap 4 的顶部栏。 要调用多个实例,请使用唯一的 id 或类,然后使用引导轮播 js 回调触发它。 【参考方案1】:

如果您使用像 Webpack 这样的打包工具,您可以按照 here 中的说明导入和编译各个组件

【讨论】:

【参考方案2】:

如果您的网站除了滑块部分之外的其他部分不必使用引导程序,那么我建议您仅将外部库用于滑块,因为从引导程序库中仅过滤滑块代码并不容易。

这是仅滑块的参考网站链接:https://kenwheeler.github.io/slick/

这个滑块很容易自定义,并且有很多选项可以使用 Jquery 设置滑块属性。

我希望这将帮助您解决您的问题,这只是 SLider 库,因此它不会与您的主 css 冲突,因此您可以轻松地将这个库添加到您的代码中。

谢谢...

【讨论】:

嘿,你看过这个答案吗?【参考方案3】:

我找到了一个旧的Pen 并对其进行了一些定制以满足您的需求。

这是一个独立的 Bootstrap 4 Carousel,没有依赖项(甚至是 jQuery):

更新1:添加图片源并将默认高度设置为70vh

更新 2: 添加了视频 - iframe 支持。似乎 SOF 不允许使用视频/iframe 背景,所以这里是 codepen 来源。

const carousel = document.getElementById('carouselExampleControls')
const items = carousel.querySelectorAll('.carousel-item');
let currentItem = 0;
let isActive = true;

function setCurrentItem(index) 
  currentItem = (index + items.length) % items.length;


function hideItem(direction) 
  isActive = false;
  items[currentItem].classList.add(direction);
  items[currentItem].addEventListener('animationend', function() 
    this.classList.remove('active', direction);
  );


function showItem(direction) 
  items[currentItem].classList.add('next', direction);
  items[currentItem].addEventListener('animationend', function() 
    this.classList.remove('next', direction);
    this.classList.add('active');
    isActive = true;
  );


document.getElementById('carouselPrev').addEventListener('click', function(e) 
  e.preventDefault()
  if (isActive) 
    hideItem('to-right');
    setCurrentItem(currentItem - 1);
    showItem('from-left');
  
);

document.getElementById('carouselNext').addEventListener('click', function(e) 
  e.preventDefault()
  if (isActive) 
    hideItem('to-left');
    setCurrentItem(currentItem + 1);
    showItem('from-right');
  
);
*,
*::after,
*::before 
  box-sizing: border-box;


img 
  display: block;
  vertical-align: middle;


body 
  margin: 0;
  font-family: sans-serif;


.carousel 
  position: relative;


.carousel-inner 
  position: relative;
  width: 100%;
  overflow: hidden;


.carousel-inner>.carousel-item 
  position: relative;
  display: none;
  animation: 0.6s ease-in-out;
  height: 70vh; /* Set your height */


.carousel-item>.carousel-img 
  width: 100%;
  min-height: 70vh; /* same height */
  height: auto;

.carousel-item.carousel-video 
  display: block;
  object-fit: cover;
  position: absolute;
  top: 50%;
  left: 50%;
  min-width: 100%;
  min-height: 100%;
  width: auto;
  height: auto;
  z-index: 0;
  -webkit-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  /* uncomment the following line if you want to prevent mouse (or touch) clicks */
  /* pointer-events: none; */

.carousel-inner>.active,
.carousel-inner>.next 
  display: block;


.carousel-inner>.next 
  position: absolute;
  top: 0;
  width: 100%;


.carousel-inner>.to-left 
  animation-name: left;


.carousel-inner>.from-right 
  animation-name: right;


.carousel-inner>.to-right 
  animation-name: right;
  animation-direction: reverse;


.carousel-inner>.from-left 
  animation-name: left;
  animation-direction: reverse;


.carousel-control 
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 15%;
  cursor: pointer;


.carousel-control-prev,
.carousel-control-next 
  position: absolute;
  top: 0;
  bottom: 0;
  z-index: 1;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-align: center;
  align-items: center;
  -ms-flex-pack: center;
  justify-content: center;
  width: 15%;
  color: #fff;
  text-align: center;
  opacity: 0.5;
  transition: opacity 0.15s ease;


@media (prefers-reduced-motion: reduce) 
  .carousel-control-prev,
  .carousel-control-next 
    transition: none;
  


.carousel-control-prev:hover,
.carousel-control-prev:focus,
.carousel-control-next:hover,
.carousel-control-next:focus 
  color: #fff;
  text-decoration: none;
  outline: 0;
  opacity: 0.9;


.carousel-control-prev 
  left: 0;


.carousel-control-next 
  right: 0;


.carousel-control-prev-icon,
.carousel-control-next-icon 
  display: inline-block;
  width: 20px;
  height: 20px;
  background: no-repeat 50% / 100% 100%;


.carousel-control-prev-icon 
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e");


.carousel-control-next-icon 
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e");


.sr-only 
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;


.sr-only-focusable:active,
.sr-only-focusable:focus 
  position: static;
  width: auto;
  height: auto;
  overflow: visible;
  clip: auto;
  white-space: normal;


@keyframes left 
  from 
    left: 0;
  
  to 
    left: -100%;
  


@keyframes right 
  from 
    left: 100%;
  
  to 
    left: 0;
  
<div id="carouselExampleControls" class="carousel">
  <div class="carousel-inner">
    <!-- YouTube Video -->
    <div class="carousel-item active">
      <iframe class="carousel-video"   src="https://www.youtube.com/embed/QEbuc3cgmsI" frameborder="0"
        allowfullscreen></iframe>
      <!-- add "?autoplay=1" at the end of the URL for autoplay i.e. https://www.youtube.com/embed/QEbuc3cgmsI?autoplay=1 -->
    </div>
    <!-- Local Video -->
    <div class="carousel-item">
      <video class="carousel-video" autoplay muted loop playsinline preload="metadata"
        poster="http://techslides.com/demos/sample-videos/small.jpg">
        <source src="http://techslides.com/demos/sample-videos/small.webm" type="video/webm">
        <source src="http://techslides.com/demos/sample-videos/small.ogv" type="video/ogg">
        <source src="http://techslides.com/demos/sample-videos/small.mp4" type="video/mp4">
      </video>
    </div>
    <!-- Image -->
    <div class="carousel-item">
      <img class="carousel-img"  src="https://source.unsplash.com/collection/190728/1920x1080">
    </div>
  </div>

  <a id="carouselPrev" class="carousel-control-prev" href="#carouselExampleControls" role="button">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a id="carouselNext" class="carousel-control-next" href="#carouselExampleControls" role="button">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>

【讨论】:

抱歉回复慢但是它不是“移动友好”,知道如何让它对移动友好吗? @greenboxgoolu 它在某种程度上“对移动设备友好”,但它取决于您的图像高度以及您是否要向其添加内容。你能给一个链接看看你想要的轮播形式是什么吗?我已经编辑了答案并将默认高度设置为70vh 但是如果是视频呢? 相同的概念,您只需要添加一些额外的 CSS。见here 抱歉回复晚了,下班后会更新的【参考方案4】:

你应该重写你的代码。因为 Bootstrap 是万维网 2.0 的一种模式。使用 Bootstrap 的所有功能,您的网站将看起来很漂亮。请下载完整的引导程序包并使用它,不要做任何事情。使用https://getbootstrap.com/docs/4.4/getting-started/download/。十年后开始后信息时代-Bootstrap 将完成。最后,程序不是数据大小。

【讨论】:

【参考方案5】:

这是 Nathaniel 建议你做的一个例子。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.8.0/css/bulma.min.css" />
<link rel="stylesheet" href="style.css" />

当然,在您的情况下,您使用的是 Bootstrap,但希望这个视觉效果可以帮助您理解 Nathaniels 推荐的那一部分。

然后你只需获取你需要的 Bootstrap 类名,你就可以在你的 JavaScript 文件中编写的 html 中实现它。

const carouselTemplate = (videoDetail) => 
   return `<div class=“carousel-item-active”>
            <video controls=“true”>
              <source src=“$videoDetail.id”>
            </video>
          </div>`;

然后您想将该 HTML 渲染到 DOM,因此您可以像这样在 HTML 中创建一个元素:

<div id="carousel"></div>

然后回到您的 JavaScript 文件中,您执行以下操作:

document.querySelector('#carousel').innerHTML = carouselTemplate(response.data);

您传入的 response.data 可以是 videoDetail 数据对象,我假设您可能已通过以下方式获取:

const onVideoSelect = async video => 
  const response = await axios.get('http://www.youtube.com/');
  document.querySelector('#carousel').innerHTML = carouselTemplate(response.data)

axios.get() 中可能缺少一些参数对象,以便 YouTube 获取特定 ID 的视频,但我目前没有 YouTube API 文档。

【讨论】:

【参考方案6】:

我对 Bootstrap Carousel (3.x) 有同样的渴望,但没有 Bootstrap 的所有其余部分。我在这里放了一个小的 git repo 和如何使用它的说明:https://github.com/mdlavin/bootstrap-carousel-standalone

【讨论】:

以上是关于Bootstrap CSS/Javascript 仅用于轮播的主要内容,如果未能解决你的问题,请参考以下文章

前端基础06 Bootstrap框架

Bootstrap入门!

视频分享Twitter前端CSS框架Bootstrap视频教程

前端之Bootstrap

Web前端期末大作业-响应式艺术培训机构网页设计(bootstrap+HTML+CSS+JavaScript+)实现

Web前端期末大作业-响应式艺术培训机构网页设计(bootstrap+HTML+CSS+JavaScript+)实现