- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > web開(kāi)發(fā) > JavaScript >
- vue+rem自定義輪播圖效果
使用vue+rem自定義輪播圖的實(shí)現,供大家參考,具體內容如下
單位使用rem進(jìn)行頁(yè)面布局,在動(dòng)態(tài)計算輪播圖整體寬度時(shí),需要把px轉換成rem,挺麻煩的。
效果如下:如果當前圖片不是第一張和最后一張,剛好可以看到當前圖片上一張和下一張的一部分。
具體代碼如下
<template> <div class="constructionUp"> <div class="pub-hd"> <h2>施工升級包</h2> <h3>額外服務(wù)項目</h3> </div> <div id="activityDiv"> <ul num="0" id="activityUl"> <li class="activityLi" v-for="(v,i) in listData" :key="i" @touchstart.capture="touchStart" @touchend.capture="touchEnd"> <img src="static/imgs/package/bitmap.jpg"> <div class="liText"> <p class="liTtitle">{{v.lititle}}</p> <p class="liDes">1、開(kāi)工后,客戶(hù)、設計師、項目管家三方進(jìn)行現場(chǎng)交底,若有個(gè)性化項目變更,執行正常的客戶(hù)變更手續(參照:客戶(hù)變更告知書(shū));</p> <p class="liDes">2、交底后,若客戶(hù)原因要求個(gè)性化項目變更,除了承擔個(gè)性化項目的費用外,還要增/次的調撥費用。</p> <p class="liPrice"> <span class="title1">主題包價(jià)格:¥</span> <span class="title2">4500</span> <span class="title3">元</span> </p> </div> </li> </ul> <div class="pointerDiv"> <span :class="[currantIndex ===0 ? 'active' : '', 'pointer']"></span> <span :class="[currantIndex ===1 ? 'active' : '', 'pointer']"></span> <span :class="[currantIndex ===2 ? 'active' : '', 'pointer']"></span> </div> </div> </div> </template> <script> export default { data () { return { listData: [{lititle: '舊房改造'}, {lititle: '舊房改造2'}, {lititle: '舊房改造3'}], liWidth: 0, liNum: 0, startX: 0, endX: 0, currantIndex: 0, test: false } }, mounted () { this.initUlWidth() }, methods: { initUlWidth () { // 初始化 ul的寬度 let pit = document.documentElement.clientWidth / 750 // 當前手機屏幕和750屏幕的比例 let oldWidth = document.getElementsByClassName('activityLi')[0].offsetWidth // 單個(gè)li的寬度 let marginR = getComputedStyle(document.getElementsByClassName('activityLi')[0], null)['marginRight'] // 獲取單個(gè)的marginRight,帶px let marginNum = parseInt(marginR.replace('px', '')) this.liWidth = oldWidth + marginNum // 單個(gè)寬度+maringRight let liCount = parseInt(document.getElementsByClassName('activityLi').length)// li的個(gè)數 this.liNum = liCount let ULpx = oldWidth * liCount + (liCount - 1) * marginNum // 最后一個(gè)margin不算 document.getElementById('activityUl').style.width = ULpx / pit + 'px'// 除以比率,讓當前div寬度與2倍設計比例一樣,設置ul的長(cháng)度最后那個(gè)margin不算 }, touchStart (e) { // 記錄初始位置 e.preventDefault() // 阻止默認事件,滾動(dòng)等 this.startX = e.touches[0].clientX // 記錄滑動(dòng)開(kāi)始的位置 }, touchEnd (e) { e.preventDefault() // 阻止默認事件 // 記錄結束位置 this.endX = e.changedTouches[0].clientX // 左滑 if (this.startX - this.endX > 30) { console.log('左滑') if (this.currantIndex >= this.liNum - 1) { // 不做操作 } else { this.currantIndex++ document.getElementById('activityUl').style.left = -this.currantIndex * this.liWidth + 'px' } } // 右滑 if (this.startX - this.endX < -30) { if (this.currantIndex === 0) { // 不做操作 } else { this.currantIndex-- document.getElementById('activityUl').style.left = -this.currantIndex * this.liWidth + 'px' } } this.startX = 0 this.endX = 0 } } } </script> <style lang="less" scoped> @import "~less/base.less"; .constructionUp{ width: 100%; .pub-hd{ padding: 0.8rem 0 0.6rem 0; text-align: center; background-color: #ffffff; h2{ font-size: 0.32rem; color: #606771; } h3{ margin-top: 0.26rem; font-size: 0.24rem; color: #b9bec4; } } #activityDiv{ padding-left: 0.4rem; background-color: #ffffff; overflow: hidden; #activityUl{ position: relative; left: 0; height: 8.06rem; transition:all .35s ease-in-out; background-color: #ffffff; .activityLi{ float: left; width: 6.7rem; height: 8.06rem; &:not(:last-child){ margin-right: 0.3rem; } box-shadow: 0 5px 25px 0 rgba(0,0,0,.4); img{ width: 100%; height: 3.6rem; } .liText{ padding: 0 0.4rem; text-align: left; .liTtitle{ padding: 0.48rem 0 0.36rem 0; font-size: 0.34rem; color: #000000; } .liDes{ font-size: 0.2rem; color:#b5b5b5; } } .liPrice{ height: 0.28rem; line-height: 0.28rem; color: @c-main; //顏色換一下就好 vertical-align: bottom; margin-top: 0.8rem; .title1{ display: inline-block; font-size: 0.22rem; } .title2{ display: inline-block; font-size: 0.35rem; } .title3{ display: inline-block; font-size: 0.22rem; } } } } .pointerDiv{ width: 100%; height: 1.54rem; background-color: #ffffff; display: flex; align-items: center; justify-content: center; .pointer{ display: inline-block; width: 0.16rem; height: 0.16rem; background-color: #cccccc; border-radius: 100%; &:nth-child(2){ margin:0 0.4rem; } &.active{ background-color: @c-main; } } } } } </style>
關(guān)于vue.js組件的教程,請大家點(diǎn)擊專(zhuān)題進(jìn)行學(xué)習。
更多vue學(xué)習教程請閱讀專(zhuān)題
以上就是本文的全部?jì)热?,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站