uniapp實(shí)現(xiàn)滑動(dòng)評(píng)分效果
本文實(shí)例為大家分享了uniapp實(shí)現(xiàn)滑動(dòng)評(píng)分的具體代碼,供大家參考,具體內(nèi)容如下
uniapp開發(fā)、 滑動(dòng)評(píng)分、點(diǎn)擊評(píng)分
<template> <view> <view class="flex" style="margin:200rpx;"> <block v-for="(item,index) in scoreArray" :key='index' ><!-- 遍歷評(píng)分列表 --> <!-- 設(shè)置觸摸事件和點(diǎn)擊事件為同一個(gè)方法,否則點(diǎn)擊卻不滑動(dòng)的話,不觸發(fā)事件 --> <view class='starLen' @touchmove='changeScore' @tap='changeScore' > <!-- 使用三目運(yùn)算符來動(dòng)態(tài)變化顯示的是哪張圖片,score是js中的分?jǐn)?shù),index是scoreArray的下標(biāo) --> <!-- src部分可以這樣寫 src="{{score>index?'../../images/fullStar.png':'../../images/nullStar.png'}}" ,這樣可以在js文件把fullStarUrl和nullStarUrl去掉 --> <image class='star' mode="aspectFill" :src="score>index?fullStarUrl:nullStarUrl" style="width: 30rpx; height: 30rpx;"/> </view> </block> <view class='scoreContent'>{{scoreContent}}</view><!-- 顯示當(dāng)前評(píng)分 --> </view> </view> </template> <script> export default{ onLoad() { }, data(){ return{ fullStarUrl: '滿星的圖片', //滿星圖片 nullStarUrl: '空星圖片', //空星圖片 score: 0, //評(píng)價(jià)分?jǐn)?shù) scoreArray: [1, 2, 3, 4, 5], //分為1-5個(gè)評(píng)分層次 scoreText: ['1星', '2星', '3星', '4星', '5星'], //評(píng)分列表 scoreContent: '' //文字顯示評(píng)分情況 } }, methods:{ changeScore: function(e) { console.log(e)//控制臺(tái)觸摸事件信息 var that = this; var num = 0;//臨時(shí)數(shù)字,動(dòng)態(tài)確定要傳入的分?jǐn)?shù) var touchX = e.touches[0].pageX;//獲取當(dāng)前觸摸點(diǎn)X坐標(biāo) var starMinX = 110;//最左邊第一顆星的X坐標(biāo),假設(shè)距離頁(yè)面距離為110,距離左邊的距離是多少 var starWidth = 15;//星星圖標(biāo)的寬度,假設(shè)15(已在wxss文件中設(shè)置".star") var starLen = 5;//星星之間的距離假設(shè)為5(已在wxss文件中設(shè)置".starLen") var starMaxX = starWidth * 5 + starLen * 4+starMinX;//最右側(cè)星星最右側(cè)的X坐標(biāo),需要加上5個(gè)星星的寬度和4個(gè)星星間距 if (touchX > starMinX && touchX < starMaxX) {//點(diǎn)擊及觸摸的初始位置在星星所在空間之內(nèi) //使用Math.ceil()方法取得當(dāng)前觸摸位置X坐標(biāo)相對(duì)于(星星+星星間距)之比的整數(shù),確定當(dāng)前點(diǎn)擊的是第幾個(gè)星星 num = Math.ceil((touchX - starMinX) / (starWidth + starLen)); if (num != that.score) {//如果當(dāng)前得分不等于剛設(shè)置的值,才賦值,因?yàn)閠ouchmove方法刷新率很高,這樣做可以節(jié)省點(diǎn)資源 that.score = num, that.scoreContent=that.scoreText[num - 1] } } else if (touchX < starMinX) {//如果點(diǎn)擊或觸摸位置在第一顆星星左邊,則恢復(fù)默認(rèn)值,否則第一顆星星會(huì)一直存在 that.score = 0, that.scoreContent ='' } }, } } </script> <style lang="less" scoped> .starLen{ margin-right: 10rpx; display: inline-block; } .star{ width:30rpx; height:30rpx; } .scoreContent{ margin-left: 100rpx; display: inline-block; color: #fff; } </style>
代碼中的距離都是按照10px/2,轉(zhuǎn)為5rpx,(如果使用其他單位,請(qǐng)自行轉(zhuǎn)換)
var starMinX = 110,最左邊的星星離屏幕左邊的距離
var starWidth = 15 ,為星星的寬度
var starLen = 5,為兩個(gè)星星之間相隔的距離。
示例效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- uniapp實(shí)現(xiàn)tabs切換(可滑動(dòng))效果實(shí)例
- uniapp組件之tab選項(xiàng)卡滑動(dòng)切換功能實(shí)現(xiàn)
- uniapp使用scroll-view實(shí)現(xiàn)左右上下滑動(dòng)功能
- uniapp小視頻項(xiàng)目開發(fā)之滑動(dòng)播放視頻
- uniapp開發(fā)小程序?qū)崿F(xiàn)滑動(dòng)頁(yè)面控制元素的顯示和隱藏效果
- uniapp實(shí)現(xiàn)可以左右滑動(dòng)導(dǎo)航欄
- uni-app封裝組件實(shí)現(xiàn)下方滑動(dòng)彈出模態(tài)框效果
相關(guān)文章
JavaScript仿商城實(shí)現(xiàn)圖片廣告輪播實(shí)例代碼
大家在逛購(gòu)物商城的時(shí)候不知道有沒有注意到商城首頁(yè)上面都會(huì)有各種輪播廣告,效果非常好,下面小編給大家整理特此分享給大家學(xué)習(xí)2016-02-02javaScript實(shí)現(xiàn)一個(gè)隊(duì)列的方法
這篇文章主要介紹了javaScript實(shí)現(xiàn)一個(gè)隊(duì)列的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07JS實(shí)現(xiàn)Cookie讀、寫、刪除操作工具類示例
這篇文章主要介紹了JS實(shí)現(xiàn)Cookie讀、寫、刪除操作工具類,涉及javascript針對(duì)cookie的讀、寫、刪除、清空等相關(guān)操作實(shí)現(xiàn)技巧,并附帶了簡(jiǎn)單cookie操作插件供大家參考,需要的朋友可以參考下2018-08-08js 將線性數(shù)據(jù)轉(zhuǎn)為樹形的示例代碼
這篇文章主要介紹了js 將線性數(shù)據(jù)轉(zhuǎn)為樹形的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05JS中錨點(diǎn)鏈接點(diǎn)擊平滑滾動(dòng)并自由調(diào)整到頂部位置
這篇文章主要介紹了JS中錨點(diǎn)鏈接點(diǎn)擊平滑滾動(dòng)并自由調(diào)整到頂部位置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02解決layer彈出層自適應(yīng)頁(yè)面大小的問題
今天小編就為大家分享一篇解決layer彈出層自適應(yīng)頁(yè)面大小的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09