国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

vue的滾動條插件實現代碼

來源:懂視網 責編:小采 時間:2020-11-27 21:50:53
文檔

vue的滾動條插件實現代碼

vue的滾動條插件實現代碼:這篇文章主要介紹了vue的滾動條插件實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 效果如下 代碼如下 <template> <div class=vue-scroll ref=vueScrollW
推薦度:
導讀vue的滾動條插件實現代碼:這篇文章主要介紹了vue的滾動條插件實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 效果如下 代碼如下 <template> <div class=vue-scroll ref=vueScrollW

這篇文章主要介紹了vue的滾動條插件實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

效果如下

代碼如下

<template>
 <div class="vue-scroll" ref="vueScrollW">
 <div class="vue-scroll-w" ref="vueScroll" >
 <div class="vue-scroll-c" :style="{width:cWidth}">
 <slot></slot>
 </div>
 </div>
 <div class="vue-scrollbar" v-if="rate < 1">
 <div class="vue-scrollbar-thumb"
 :style="{height:thumbH,top:thumbTop}"
 @mousedown="onmousedown"
 @mouseup="onmouseup"
 ></div>
 </div>
 </div>
</template>
 
<script>
 
 
 
export default {
 name:"vue-scroll",
 data(){
 return {
 thumb:0,
 top:0,
 rate:2,
 moveTop:null,
 isDrag:false,
 cw:10,
 observer:null
 }
 },
 computed:{
 thumbH(){
 return this.thumb + "px";
 },
 thumbTop(){
 return this.top + "px";
 },
 cWidth(){
 return this.cw + "%";
 }
 
 },
 updated(){
 if(!window.MutationObserver){
 this.refresh();
 }
 },
 mounted(){
 var me = this;
 me.$refs.vueScroll.addEventListener("scroll",me.onscroll.bind(me));
 window.addEventListener("mouseup",me.onmouseup.bind(me));
 window.addEventListener("mousemove",me.onmousemove.bind(me));
 
 if(window.MutationObserver){
 //MutationObserver 最低只兼容 ie11
 me.observer = new window.MutationObserver(me.mutationCallback.bind(me));
 me.observer.observe(me.$refs.vueScroll, {
 attributes: true,
 childList: true,
 subtree: true
 });
 }
 
 me.refresh();
 },
 methods:{
 mutationCallback(mutationsList){
 this.refresh();
 },
 onscroll(){
 this.top = this.$refs.vueScroll.scrollTop * this.rate; //計算滾動條所在的高度
 if(this.rate < 1){
 this.eventTrigger(this.top);
 }
 },
 refresh(){
 var me = this;
 var vueScroll = me.$refs.vueScroll;
 var rate = vueScroll.clientHeight / vueScroll.scrollHeight; //滾動條高度的比例,也是滾動條top位置的比例
 me.rate = rate;
 if(rate < 1){
 //需要出現滾動條,并計算滾動條的高度
 me.thumb = rate * vueScroll.clientHeight; //滾動條的 bar 的高度
 //計算出原生的滾動條的寬度
 var w = me.$refs.vueScrollW.clientWidth;
 //根據比例,轉換為內容的百分比
 me.cw = w/vueScroll.clientWidth *100;
 }else{
 //不需要出現滾動條
 me.thumb = 0;
 me.cw = 10;
 }
 },
 
 onmousedown(){
 this.isDrag = true;
 this.moveTop = null;
 },
 onmouseup(){
 this.isDrag = false;
 },
 onmousemove(e){
 if(this.isDrag){
 if(this.moveTop !== null){
 var speed = e.screenY - this.moveTop;
 var top = this.top + speed;
 this.scrollThumb(top);
 }
 this.moveTop = e.screenY;
 e.preventDefault();
 }
 
 },
 scrollThumb(top){
 if(top < 0 ){
 top = 0;
 
 }
 if(top > this.$refs.vueScroll.clientHeight-this.thumb){
 top = this.$refs.vueScroll.clientHeight-this.thumb;
 
 }
 
 this.$refs.vueScroll.scrollTop = top/this.rate;
 this.top = top;
 },
 eventTrigger(top){
 if(top === 0){
 this.$emit("reachTop"); //到達頂部
 }
 if(top === this.$refs.vueScroll.clientHeight-this.thumb){
 this.$emit("reachBottom"); //到達底部與
 }
 this.$emit("vuescroll",this.$refs.vueScroll.scrollTop,this.top);//返回內容滾動的高度 和 滾動條所在的高度
 },
 scrollTo(scrollTop){
 //對外的api,滾動的內容的哪里
 this.$refs.vueScroll.scrollTop = scrollTop;
 this.$nextTick(()=>{
 this.onscroll();
 })
 }
 },
 destroyed(){
 var me = this;
 me.$refs.vueScroll && me.$refs.vueScroll.removeEventListener("scroll",me.onscroll.bind(me));
 window.removeEventListener("mouseup",me.onmouseup.bind(me));
 window.removeEventListener("mousemove",me.onmousemove.bind(me));
 me.observer&&me.observer.disconnect();
 }
}
</script>
 
<style lang="scss" scoped>
.vue-scroll{
 height: 100%;
 width: 100%;
 overflow: hidden;
 position: relative;
 .vue-scroll-w{
 width: 1000%;
 height: 100%;
 overflow: auto;
 .vue-scroll-c{
 position: relative;
 width: 10%;
 }
 }
 .vue-scrollbar{
 position: absolute;
 z-index: 1;
 right: 0;
 top: 0;
 width: 4px;
 height: 100%;
 background: #EEEEEE;
 opacity: 0.6;
 .vue-scrollbar-thumb{
 position: absolute;
 top: 0;
 right: 0;
 width: 4px;
 border-radius: 4px;
 background: #D3D3D3;
 &:hover{
 background: #bbb;
 }
 &:active{
 background: #aaa;
 }
 }
 }
}
</style>

使用

<template>
 <div class="scroll">
 <vueScroll>
 <ul>
 <li v-for="item in 60" :key="item">{{item}}</li>
 </ul>
 </vueScroll>
 </div>
</template>
 
<script>
import vueScroll from "@/components/vue-scroll.vue"
export default {
 data(){
 return {
 count:60
 }
 },
 components:{
 vueScroll
 },
 mounted(){
 
 }
}
</script>
<style lang="less" scoped>
.scroll{
 width: 400px;
 height: 600px;
 margin: 0 auto;
 border: 1px solid red;
 ul{
 li{
 line-height: 30px;
 border-bottom: 1px solid #ddd;
 }
 }
}
</style>

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue的滾動條插件實現代碼

vue的滾動條插件實現代碼:這篇文章主要介紹了vue的滾動條插件實現代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下 效果如下 代碼如下 <template> <div class=vue-scroll ref=vueScrollW
推薦度:
標簽: VUE 實現 代碼
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产91成人精品亚洲精品 | 亚洲视频第一页 | 高清国产一区 | 精品一区二区三区免费观看 | 国产精品成人一区二区 | 激情一区 | 极品久久| 国产精品香蕉一区二区三区 | 国产 日韩 欧美 亚洲 | 亚洲视频在线观看视频 | 亚洲精品影院久久久久久 | 波多野的店 | 精品久久久久久久中文字幕 | 91热久久| 中国特黄毛片 | 国产 欧美 日本 | 在线一区二区三区 | 超级毛片| 国产福利久久青青草原下载 | 成人精品久久 | 国产精品久久久久久永久牛牛 | 视频在线一区 | 亚洲一区二区三区四 | 亚洲国产精品欧美日韩一区二区 | 欧美高清在线视频一区二区 | 欧美日韩国产综合在线 | 亚洲欧美精品成人久久91 | 99热这里只有精品一区二 | 在线观看亚洲专区 | 91国内精品久久久久免费影院 | 一道本一区二区三区 | 国产91在线 | 中文 | 亚洲日本在线观看 | 免费国产线观看免费观看 | 亚洲欧美国产高清va在线播放 | 亚洲精品国产成人99久久 | 亚洲视频在线免费看 | 毛片免费网站 | 国产激情一级毛片久久久 | 久久精品国产一区二区三区 | 精品在线播放 |