Advertisement
Guest User

Untitled

a guest
Jun 27th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. <template>
  2. <section class="slider">
  3. <nav class="slider__nav">
  4. <div class="slider__nav-wrapper">
  5. <button class="slider__nav-toggle-dot" v-for='slide in sliderList' v-on:click='openSlide(slide.id)'></button>
  6. </div>
  7. </nav>
  8.  
  9. <div class='slider__container'>
  10. <ul class="slider__list" v-bind:style='{left: sliderOffsetLeft + "px"}'>
  11. <li class="slider__slide" v-for='slide in sliderList'>
  12. <div class="slider__slide-container" v-bind:style='"background-image: url(" + slide.img + ")"'>
  13. <h1 v-html="`${slide.quote}`"></h1>
  14. <h5 v-html="`${slide.peopleName}`"></h5>
  15. <p v-html="`${slide.description}`"></p>
  16. </div>
  17. </li>
  18. </ul>
  19. </div>
  20. </section>
  21. </template>
  22.  
  23. <script src="../../Slider.js" >
  24.  
  25. </script>
  26.  
  27. <style lang="scss" scoped>
  28. .slider {
  29. position: relative;
  30. width: 320px;
  31. height: 481px;
  32. }
  33. ...
  34.  
  35. <template>
  36. <section class="slider">
  37.  
  38. <nav class="slider__nav">
  39. <button type="button" class="slider__nav-toggle slider__nav-toggle_prev" v-on:click='prevSlide'>
  40. <svg class="slider__nav-toggle_image slider__nav-toggle_image-prev" viewBox="0 0 26 46"><defs><path id="st66a" d="M541 211a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-27v27a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-30a1 1 0 0 1 1-1z"/></defs><g><g transform="rotate(-45 18.25 732.175)"><use xlink:href="#st66a"/></g></g></svg>
  41. </button>
  42. <button type="button" class="slider__nav-toggle slider__nav-toggle_next" v-on:click='nextSlide'>
  43. <svg class="slider__nav-toggle_image slider__nav-toggle_image-next" viewBox="0 0 26 46"><defs><path id="st66a" d="M541 211a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-27v27a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-30a1 1 0 0 1 1-1z"/></defs><g><g transform="rotate(-45 18.25 732.175)"><use xlink:href="#st66a"/></g></g></svg>
  44. </button>
  45.  
  46. <div class="slider__nav-wrapper">
  47. <button class="slider__nav-toggle-dot" v-for='slide in sliderList' v-on:click='openSlide(slide.id)' :key="slide.id"></button>
  48. </div>
  49. </nav>
  50.  
  51. <div class='slider__container'>
  52. <ul class="slider__list" v-bind:style='{left: sliderOffsetLeft + "px"}'>
  53. <li class="slider__slide" v-for='slide in sliderList' :key="slide.id">
  54. <img class="slider__slide-image" :src="`${slide.img}`" alt="Изображение сладера">
  55. <div class="slider__slide-description" v-html="`${slide.text}`"></div>
  56. </li>
  57. </ul>
  58. </div>
  59. </section>
  60. </template>
  61.  
  62. <script src="../../Slider.js">
  63.  
  64. </script>
  65.  
  66. <style lang="scss" scoped>
  67. .slider {
  68. position: relative;
  69. width: 320px;
  70. height: 528px;
  71. background-color: #111111;
  72. }
  73. ...
  74.  
  75. export default {
  76. name: 'Slider',
  77. data () {
  78. return {
  79. // Всего слайдов
  80. sliderAllCount: 0,
  81. // Номер активного слайда
  82. sliderActive: 1,
  83. // Отступ тела со слайдами в контейнере
  84. sliderOffsetLeft: 0,
  85. // Шаг одного слайда = его длина
  86. sliderOffsetStep: 0,
  87. // Список изображений
  88. }
  89. },
  90. props: [
  91. 'sliderList'
  92. ],
  93. methods: {
  94. // Иницилизация слайдера
  95. initSlider: function () {
  96. let sliderBody = this.$el.querySelector('.slider__container');
  97. let sliderSlidies = sliderBody.querySelectorAll('.slider__slide');
  98. this.sliderOffsetStep = sliderBody.clientWidth;
  99. this.sliderAllCount = sliderSlidies.length;
  100.  
  101. let dots = this.$el.querySelectorAll('.slider__nav-toggle-dot');
  102. dots.item(0).classList.add('slider__nav-toggle-dot_active');
  103. },
  104.  
  105. // Открыть слайд по номеру
  106. openSlide: function (id) {
  107. if (id > 0 && id <= this.sliderAllCount) {
  108. this.sliderActive = id;
  109. this.sliderOffsetLeft = -(this.sliderActive * this.sliderOffsetStep - this.sliderOffsetStep);
  110.  
  111. let dots = this.$el.querySelectorAll('.slider__nav-toggle-dot');
  112. dots.forEach( dot => dot.classList.remove('slider__nav-toggle-dot_active') );
  113. dots.item(id-1).classList.add('slider__nav-toggle-dot_active');
  114. }
  115. },
  116.  
  117. // Следующий слайд
  118. nextSlide: function () {
  119. if (this.sliderActive < this.sliderAllCount) {
  120. this.sliderActive += 1;
  121. this.openSlide(this.sliderActive);
  122. }
  123. },
  124.  
  125. // Предыдущий слайд
  126. prevSlide: function () {
  127. if (this.sliderActive > 1) {
  128. this.sliderActive -= 1;
  129. this.openSlide(this.sliderActive);
  130. }
  131. }
  132. },
  133.  
  134. mounted () {
  135. this.initSlider();
  136. // Перенастройка слайдера при изменении размера окна
  137. window.addEventListener('resize', () => {
  138. this.initSlider();
  139. this.openSlide(this.sliderActive);
  140. })
  141. }
  142. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement