一、关于详情页Tab的隐藏

image.png
image.png

给详情页最外部div一个样式覆盖

  1. .detail-container {
  2. position: absolute;
  3. top: 0;
  4. left: 0;
  5. width: 100%;
  6. z-index: 10;
  7. min-height: 100%;
  8. background: #fff;
  9. }

二、遍历对象下标

image.png

  • 获取下标

image.png

  • 通过下标遍历数组

image.png

  • 获取数组下标到新数组

image.png

三、视频播放

  1. //1.安装依赖
  2. yarn add video.js
  3. //2.在utils的config.js中导入
  4. import Video from 'video.js'
  5. Vue.prototype.$video=Video;
  6. //3.视频播放
  7. <video :src="url" class="video" controls preload="auto"></video>

相关属性

  1. <video id="myVideo"
  2. class="video-js vjs-default-skin vjs-big-play-centered"
  3. controls //确定播放器是否具有用户可以与之交互的控件。没有控件,启动视频播放的唯一方法是使用autoplay属性或通过Player API。
  4. autoplay //自动播放属性,muted:静音播放
  5. preload="auto" //建议浏览器是否应在<video>加载元素后立即开始下载视频数据。
  6. poster="../assets/img/E0531.jpg"> //设置视频封面 <source src="../assets/video/E0531.mp4" type="video/mp4" > //视频地址
  7. </video>

四、图片横向滚动

1.gif

  1. <div class="wrapper">
  2. <div class="container">
  3. <img src="src/assets/logo.png" alt="">
  4. <img src="src/assets/logo.png" alt="">
  5. <img src="src/assets/logo.png" alt="">
  6. <img src="src/assets/logo.png" alt="">
  7. <img src="src/assets/logo.png" alt="">
  8. <img src="src/assets/logo.png" alt="">
  9. </div>
  10. </div>
  1. //css样式
  2. <style>
  3. .wrapper{
  4. overflow-x: auto;
  5. overflow-y: hidden;
  6. border: 1px solid #333;
  7. }
  8. img{
  9. width: 250px;
  10. }
  11. /* 去掉滚动条,但是在移动端上划不动 */
  12. /* .wrapper::-webkit-scrollbar{
  13. display: none;
  14. } */
  15. .container{
  16. display: grid;
  17. grid-template-columns:repeat(5,250px) ; //5:分成5份
  18. gap:10px; //间隔
  19. }
  20. </style>

列题:

  1. <div class="picWalls">
  2. <div v-for="datas of data.clips" :key="datas">
  3. <img :src="datas.small" alt="">
  4. </div>
  5. </div>
  6. //css样式
  7. .picWalls{
  8. overflow-x: auto;
  9. overflow-y: hidden;
  10. display: grid;
  11. grid-template-columns: repeat(5, 150px);
  12. gap: 20px;
  13. }
  14. .picWalls img{
  15. width: 150px;
  16. height: 80px;
  17. }

五、文本折叠

1.0.gif

核心代码

  1. <p @click="handleClick" :class="{ expansion : active }">{{movies.summary}}</p>
  1. .expansion {
  2. white-space: pre-line;
  3. width: 100%;
  4. overflow: hidden;
  5. -webkit-line-clamp: 2;
  6. text-overflow: ellipsis;
  7. display: -webkit-box;
  8. -webkit-box-orient: vertical;
  9. }

六、v-for产生的列表,如何实现active样式的切换?

通过设置当前 currentIndex 实现:

  1. <template>
  2. <div class="toggleClassWrap">
  3. <ul>
  4. <!--li是否有clicked样式取决于当前的currentIndex等于多少-->
  5. <li @click="currentIndex = index" v-bind:class="{clicked: index === currentIndex}" v-for="(item, index) in desc" :key="index">
  6. <a href="javascript:;">{{item.ctrlValue}}</a>
  7. </li>
  8. </ul>
  9. </div>
  10. </template>
  11. <script type="text/javascript">
  12. export default{
  13. data () {
  14. return {
  15. desc:[
  16. {
  17. ctrlValue:"test1"
  18. },
  19. {
  20. ctrlValue:"test2"
  21. },
  22. {
  23. ctrlValue:"test3"
  24. },
  25. {
  26. ctrlValue:"test4"
  27. }
  28. ],
  29. currentIndex:0
  30. }
  31. }
  32. }
  33. </script>
  34. <style type="text/css" lang="less">
  35. .toggleClassWrap{
  36. .clicked{
  37. color:red;
  38. }
  39. }
  40. </style>

七、vue中实现切换页面时为左滑出效果

左滑效果实现,需要使用 <transition></transition> 组件配合 css3 动画效果实现。

  1. <div id="app">
  2. <!-- 使用transiton来规定页面切换时候的样式-->
  3. <transition name="slide-left">
  4. <router-view></router-view>
  5. </transition>
  6. </div>
  7. <style lang="less">
  8. /*左滑动效*/
  9. .slide-left-enter-active {
  10. animation: slideLeft 0.3s;
  11. }
  12. /*自定义动画*/
  13. @keyframes slideLeft {
  14. from {
  15. transform: translate3d(100%, 0, 0);/*横坐标,纵坐标,z坐标*/
  16. visibility: visible;
  17. }
  18. to {
  19. transform: translate3d(0, 0, 0);
  20. }
  21. }
  22. </style>

八、实现无痕刷新

无痕刷新:在不刷新浏览器的情况下,实现页面的刷新
一般常用的两种刷新方法:

  • window.location.reload(),原生 js 提供的方法;
  • this.$router.go(0),vue 路由里面的一种方法;

这两种方法都可以达到页面刷新的目的,简单粗暴,但是用户体验不好,相当于按 F5 刷新页面,页面的重新载入,会有短暂的白屏。

vue开启无痕刷新

  1. 原理:先在全局组件注册一个方法,用该方法控制router-view的显示与否,然后在子组件调用全局方法。
  2. //第一步:在app.vue里面设置
  3. <template>
  4. <div id="app">
  5. <!--通过切换isRouterAlive的值来控制页面的显示与否-->
  6. <router-view v-if="isRouterAlive"></router-view>
  7. </div>
  8. </template>
  9. <script>
  10. export default {
  11. //给子组件暴露一个方法:这里将当前组件中的reload方法暴露给子组件
  12. provide(){
  13. return{
  14. reload:this.reload
  15. }
  16. },
  17. data(){
  18. return {
  19. isRouterAlive:true
  20. }
  21. },
  22. methods:{
  23. //reload方法中先把isRouterAlive该为false,让router-view不显示
  24. //然后在$nextTick方法里面重新把isRouterAlive该为true,让router-view重新显示
  25. //$nextTick表示下一次dom更新完毕之后,在更新dom的时候我们让router-view隐藏,更新dom完
  26. 毕我们让router-view显示,此时就做到了无痕刷新
  27. reload(){
  28. this.isRouterAlive = false;
  29. this.$nextTick(function(){
  30. this.isRouterAlive = true;
  31. })
  32. }
  33. }
  34. }
  35. </script>
  36. //第二步:在.vue组件中使用全局方法(先用inject注册全局方法,然后即可通过this调用)
  37. <script>
  38. export default{
  39. inject:['reload'],
  40. mounted(){
  41. this.reload();
  42. }
  43. }
  44. </script>