SetPositionPage.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <div ref="main" class="main" @click="close">
  3. <div class="mainWindow" @click.stop>
  4. <Window @close="close">
  5. <template slot="header">
  6. Установить позицию
  7. </template>
  8. <div class="slider">
  9. <el-slider v-model="sliderValue" :max="sliderMax" :format-tooltip="formatTooltip"></el-slider>
  10. </div>
  11. </Window>
  12. </div>
  13. </div>
  14. </template>
  15. <script>
  16. //-----------------------------------------------------------------------------
  17. import Vue from 'vue';
  18. import Component from 'vue-class-component';
  19. import Window from '../../share/Window.vue';
  20. export default @Component({
  21. components: {
  22. Window,
  23. },
  24. watch: {
  25. sliderValue: function(newValue) {
  26. if (this.initialized)
  27. this.$emit('book-pos-changed', {bookPos: newValue});
  28. },
  29. },
  30. })
  31. class SetPositionPage extends Vue {
  32. sliderValue = null;
  33. sliderMax = null;
  34. created() {
  35. this.commit = this.$store.commit;
  36. this.reader = this.$store.state.reader;
  37. this.initialized = false;
  38. }
  39. init(sliderValue, sliderMax) {
  40. this.sliderMax = sliderMax;
  41. this.sliderValue = sliderValue;
  42. this.initialized = true;
  43. }
  44. formatTooltip(val) {
  45. if (this.sliderMax)
  46. return (val/this.sliderMax*100).toFixed(2) + '%';
  47. else
  48. return 0;
  49. }
  50. close() {
  51. this.$emit('set-position-toggle');
  52. }
  53. keyHook(event) {
  54. if (event.type == 'keydown' && (event.code == 'Escape' || event.code == 'KeyP')) {
  55. this.close();
  56. }
  57. return true;
  58. }
  59. }
  60. //-----------------------------------------------------------------------------
  61. </script>
  62. <style scoped>
  63. .main {
  64. position: absolute;
  65. width: 100%;
  66. height: 100%;
  67. z-index: 40;
  68. display: flex;
  69. flex-direction: column;
  70. justify-content: center;
  71. align-items: center;
  72. }
  73. .mainWindow {
  74. width: 100%;
  75. max-width: 600px;
  76. height: 140px;
  77. display: flex;
  78. position: relative;
  79. top: -50px;
  80. }
  81. .slider {
  82. margin: 20px;
  83. background-color: #efefef;
  84. border-radius: 15px;
  85. }
  86. .el-slider {
  87. margin-right: 20px;
  88. margin-left: 20px;
  89. }
  90. </style>