vue采坑系列

vue-awesome-swiper动态数据渲染,loop无效,轮循无效

可以在swiper容器上加一个v-if判断一下,是否有数据加载

<template>
  <swiper :options="swiperOption" v-if="showSwiper">
    <!-- slides -->
    <swiper-slide v-for="item in swiperList" :key="item.id">
      <img class="swiperImg" :src="item.imageURL">
    </swiper-slide>
    <div class="swiper-pagination"  slot="pagination"></div>
  </swiper>
</template>
<script>
export default {
  props: {
    swiperList: Array
  },
  data () {
    return {
      swiperOption: {
        pagination: {
          el: '.swiper-pagination'
        },
        autoplay: true,
        loop: true
      }
    }
  },
  computed: {
    showSwiper () {
      return this.swiperList.length
    }
  }
}
</script>

图片加载页面抖动的问题

可以为包裹图片的元素设置如下样式

height 0
overflow hidden
//图片的高宽百分比
padding-bottom 25.6%

vue中字符串格式的字符实体转化

json数据格式

      "navsTop": [{
        "id": "001",
        "title": "周边游",
        "iconfont": "&#xe630;"
      },{
        "id": "002",
        "title": "出境游",
        "iconfont": "&#xe897;"
      },{
        "id": "003",
        "title": "国内游",
        "iconfont": "&#xe631;"
      },{
        "id": "004",
        "title": "当地游",
        "iconfont": "&#xe653;"
      },{
        "id": "005",
        "title": "签证",
        "iconfont": "&#xe669;"
      },{
        "id": "006",
        "title": "Wi-Fi",
        "iconfont": "&#xe8e4;"
      }],

vue中可以用v-html指令来显示iconfont

<div class="itemImg text-center"><i class="iconfont colorWhite" v-html='item.iconfont'></i></div>

vue中使用better-scroll

npm安装

npm install better-scroll --save

在需要的页面引入

<script>
import BScroll from 'better-scroll'
export default {
  mounted () {
    // 在dom元素渲染完成之后初始化better-scroll的实例
    const scroll = new BScroll(this.$refs.wrapper)
  }
}
</script>

html模版
wrapper下必须用一个子元素包裹住所有的滚动内容

//ref属性可以获取dom元素
<template>
  <div class="list position wrapper" ref="wrapper">
    <div>
      <div class="listItem">
        <div class="title">您的位置</div>
        <ul class="whiteBg">
          <li>杭州</li>
        </ul>
      </div>
      <div class="listItem">
        <div class="title">A</div>
        <ul class="whiteBg">
          <li>澳门</li>
          <li>阿坝州</li>
          <li>阿克苏地区</li>
          <li>阿拉尔</li>
          <li>阿拉善盟</li>
          <li>阿里</li>
          <li>阿勒泰</li>
          <li>安康</li>
          <li>安庆</li>
          <li>鞍山</li>
          <li>安顺</li>
          <li>安阳</li>
        </ul>
      </div>
      <div class="listItem">
        <div class="title">A</div>
        <ul class="whiteBg">
          <li>澳门</li>
          <li>阿坝州</li>
          <li>阿克苏地区</li>
          <li>阿拉尔</li>
          <li>阿拉善盟</li>
          <li>阿里</li>
          <li>阿勒泰</li>
          <li>安康</li>
          <li>安庆</li>
          <li>鞍山</li>
          <li>安顺</li>
          <li>安阳</li>
        </ul>
      </div>
    </div>
  </div>
</template>

css

.list
    left 0
    right 0
    top 175px
    bottom 0
    overflow hidden

点击右侧字母滚动到对应的字母列表

在这里插入图片描述
右侧的字母列表中通过点击事件向父级传递点击的元素的字母值

<template>
  <div class="sideList position flex">
    <div v-for="(item,index) in cityList" :key="index" @click="listClick">{{item.code}}</div>
  </div>
</template>
methods: {
  listClick (e) {
  	//通过change事件向父组件传递参数
     this.$emit('change', e.target.innerText)
  }
}

父组件监听change事件接收到参数后再通过属性传递给城市列表组件

<template>
  <div>
    <city-header/>
    <city-list :cityList="cityList" :letter="letter"/>
    <city-sidelist :cityList="cityList" @change="handleCity"/>
  </div>
</template>


data () {
  return {
    cityList: [],
    letter: ''
  }
},
methods: {
	handleCity (letter) {
		this.letter = letter
	}
}

城市列表监听letter变量
通过给元素设置ref属性在js中通过$refs获取dom元素

<div class="listItem" v-for="item in cityList" :key="item.code" :ref="item.code">
   <div class="title">{{ item.code }}</div>
   <ul class="whiteBg">
      <li v-for="(item1,index) in item.cityList" :key="index">{{ item1 }}</li>
   </ul>
</div>
<script>
	import BScroll from 'better-scroll'
	export default {
	  props: {
	    cityList: Array,
	    letter: String
	  },
	  mounted () {
	    // 在dom元素渲染完成之后初始化better-scroll的实例
	    this.scroll = new BScroll(this.$refs.wrapper)
	  },
	  watch: {
	    letter () {
	      if (this.letter) {
	        const elem = this.$refs[this.letter][0]
	        this.scroll.scrollToElement(elem)
	      }
	    }
	  }
	}
</script>

猜你喜欢

转载自blog.csdn.net/weixin_43756060/article/details/86510289