前言 本来想自己写教程的,无奈操作基本都是添加代码,自己写也没有什么意义,直接搬作者的教程过来好了。
原文:Akilar:基于 swiper 的首页置顶轮播图 
写在最前 本项目是对冰卡诺老师写的教程:基于 Butterfly 主题的轮播手动置顶文章 进行重构,精简了部分样式。适配 pjax。
资源下载 
由于本教程涉及的所有修改对缩进格式等有严格要求,担心自己控制不好的可以直接下载静态资源。参照教程进行修改。
 
下载资源文件  
魔改步骤 1.新建 [Blogroot]\themes\butterfly\layout\includes\sliderbar.pug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 .blog-slider.swiper-container-fade.swiper-container-horizontal#swiper_container   .blog-slider__wrp.swiper-wrapper(style='transition-duration: 0ms;')     if site.data.slider       each i in site.data.slider         .blog-slider__item.swiper-slide(style='width: 750px; opacity: 1; transform: translate3d(0px, 0px, 0px); transition-duration: 0ms;')           a.blog-slider__img(href=url_for(i.link)  alt='')|             img(width='48' height='48' src=url_for(i.cover) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.post_page) + `'`, alt='')           .blog-slider__content             span.blog-slider__code= i.timeline             a.blog-slider__title(href=url_for(i.link)  alt='')= i.title             .blog-slider__text= i.description             a.blog-slider__button(href=url_for(i.link)  alt='')= i.button         .blog-slider__pagination.swiper-pagination-clickable.swiper-pagination-bullets script(defer src=url_for(theme.CDN.swiper_js)) script(defer data-pjax src=url_for(theme.CDN.swiper_init)) 
 
2.修改 [Blogroot]\themes\butterfly\layout\index.pug,引入轮播图版块,注意 butterfly_v3.6.0 取消了缓存配置,转为完全默认,需要将 {cache:theme.fragment_cache} 改为 {cache: true}:
1 2 3 4 5 6 7 8 9     extends includes/layout.pug     block content       include ./includes/mixins/post-ui.pug       #recent-posts.recent-posts +       .recent-post-item(style='height:auto;width:100%;') +         !=partial('includes/sliderbar', {}, {cache:theme.fragment_cache})         +postUI         include includes/pagination.pug 
 
3.新建[Blogroot]\themes\butterfly\source\js\swiper_init.js,
此处是 swiper 的初始化参数,具体配置内容可以自定义,详细参数请参看 Swiper 官方文档 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 var  swiper = new  Swiper ('.blog-slider' , {  passiveListeners : true ,   spaceBetween : 30 ,   effect : 'fade' ,   loop : true ,   autoplay : {     disableOnInteraction : true ,     delay : 3000    },   mousewheel : false ,      pagination : {     el : '.blog-slider__pagination' ,     clickable : true ,   } }); var  comtainer = document .getElementById ('swiper_container' );comtainer.onmouseenter  = function ( ) {   swiper.autoplay .stop (); }; comtainer.onmouseleave  = function ( ) {   swiper.autoplay .start (); } 
 
4.新建 [Blogroot]\themes\butterfly\source\css\_layout\swiperstyle.styl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 *   box-sizing  border-box div#swiper_container    background  rgba (255 , 255 , 255 , 0 ); .blog-slider   width  100%    position  relative   border-radius  12px  8px  8px  12px    margin  auto   background  var (--global-bg)   padding : 10px    transition  all .3s  .blog-slider__item   display  flex   align-items  center   &.swiper-slide-active      .blog-slider__img        img          opacity  1          transition-delay  .3s      .blog-slider__content        & > *         opacity  1          transform  none       & > *:nth-child (1 )         transition-delay  0.3s        & > *:nth-child (2 )         transition-delay  0.4s        & > *:nth-child (3 )         transition-delay  0.5s        & > *:nth-child (4 )         transition-delay  0.6s        & > *:nth-child (5 )         transition-delay  0.7s        & > *:nth-child (6 )         transition-delay  0.8s        & > *:nth-child (7 )         transition-delay  0.9s        & > *:nth-child (8 )         transition-delay  1s        & > *:nth-child (9 )         transition-delay  1.1s        & > *:nth-child (10 )         transition-delay  1.2s        & > *:nth-child (11 )         transition-delay  1.3s        & > *:nth-child (12 )         transition-delay  1.4s        & > *:nth-child (13 )         transition-delay  1.5s        & > *:nth-child (14 )         transition-delay  1.6s        & > *:nth-child (15 )         transition-delay  1.7s  .blog-slider__img   width  200px    flex-shrink  0    height  200px    padding  10px    border-radius  5px    transform  translateX (0px )   overflow  hidden   &:after      content  ''      position  absolute     top  0      left  0      width  100%      height  100%      border-radius  5px      opacity  0.8    img      width  100%      height  100%      object-fit  cover     display  block     opacity  0      border-radius  5px      transition  all .3s  .blog-slider__content   padding-right  50px    padding-left  50px    & > *     opacity  0      transform  translateY (25px )     transition  all .4s  .blog-slider__code   color  var (--font-color)   margin-bottom  0px    display  block   font-weight  500  .blog-slider__title   font-size  18px    font-weight  700    color  var (--font-color)   margin-bottom  15px    -webkit-line-clamp 1    display  -webkit-box   overflow  hidden   -webkit-box-orient vertical .blog-slider__text   color  var (--font-color)   -webkit-line-clamp 1    display  -webkit-box   overflow  hidden   -webkit-box-orient vertical   margin-bottom  15px    line-height  1.5em    width  100%    display  block   word-break  break-all   word-wrap  break-word .blog-slider__button   display  inline-flex   background-color  var (--btn-bg)   padding  4px  14px    border-radius  8px    color  var (--btn-color)   text-decoration  none   font-weight  500    justify-content  center   text-align  center   letter-spacing  1px    display  none   &:hover      background-color  var (--btn-hover-color)     color  var (--btn-color) .blog-slider  .swiper-container-horizontal  > .swiper-pagination-bullets , .blog-slider  .swiper-pagination-custom , .blog-slider  .swiper-pagination-fraction   bottom  10px    left  0    width  100%  .blog-slider__pagination   position  absolute   z-index  21    right  20px    width  11px  !important    text-align  center   left  auto !important    top  50%    bottom  auto !important    transform  translateY (-50% )   &.swiper-pagination-bullets      .swiper-pagination-bullet        margin  8px  0    .swiper-pagination-bullet      width  11px      height  11px      display  block     border-radius  10px      background  #858585      opacity  0.2      transition  all .3s    .swiper-pagination-bullet-active      opacity  1      background  var (--btn-bg)     height  30px  @media  screen and  (max-width : 600px )  .blog-slider__pagination     transform translateX(-50% )     left 50%  !important     top 320px      width  100%  !important     display flex     justify-content center     align-items center   .blog-slider__pagination     &.swiper-pagination-bullets       .swiper-pagination-bullet         margin 0  5px    .blog-slider__pagination     .swiper-pagination-bullet-active       height  11px        width  30px    .blog-slider__button     display inline-flex     width  100%    .blog-slider__text     margin-bottom 40px    .blog-slider     min-height  350px      height  auto     margin-top 110px      margin-bottom 10px    .blog-slider__content     margin-top -80px      text-align center     padding 0  30px    .blog-slider__item     flex-direction column   .blog-slider__img     transform translateY(-50% )     width  90%    .blog-slider__content     padding-left 10px      padding-right 10px    .blog-slider__pagination.swiper-pagination-clickable.swiper-pagination-bullets     top 110px  @media screen and  (min-width : 600px )   .blog-slider     height  200px    .blog-slider__img     height  200px  
 
5.配置 CDN 依赖项,
修改 [Blogroot]\_config.butterfly.yml,
1 2 3 4 5 6 7 8 9 10     CDN:       # main       main_css: /css/index.css       jquery: https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js       main: /js/main.js       utils: /js/utils.js +     # 首页轮播图 +     swiper_js: https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.1.6/js/swiper.min.js +     swiper_css: https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.1.6/css/swiper.min.css +     swiper_init: /js/swiper_init.js 
 
修改 [Blogroot]\themes\butterfly\source\css\index.styl, 在最上方添加引入内容:
1 2 3 4 5 6 7 8 9 10 11 12 + @import url(hexo-config('CDN.swiper_css'))   if hexo-config('css_prefix')     @import 'nib'   @import '_third-party/normalize.min.css'   // project   @import 'var'   @import '_global/*'   @import '_highlight/highlight'   @import '_page/*'   @import '_layout/*'   @import '_tags/*'   @import '_mode/*' 
 
 
6.新建 [Blogroot]\source\_data\slider.yml, 在里面填写想要置顶的文章的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -  cover:  封面图片链接   timeline:  '2020-10-01'     link:  置顶文章链接,站内文章建议填相对链接    title:  置顶文章标题    description:  置顶文章描述    button:  手机端按钮内容  -  cover:  https://cdn.jsdelivr.net/gh/drew233/cdn/logol.png   timeline:  '2021-02-08'    link:  /posts/d6c8.html    title:  Hexo博客技巧:添加说说页面    description:  讲述如何利用Artitalk给博客添加说说页面.    button:  详情  -  cover:  https://upimage.alexhchu.com/2021/02/18/5fa9404c2179f.png   timeline:  '2021-02-07'    link:  /posts/c232.html    title:  阿里云IoT:控制掌控板板载灯亮灭    description:  一个使用阿里云IoT的教程.    button:  详情  
 
结语 
原文:Akilar:基于 swiper 的首页置顶轮播图 
 
End