vue 监听滚动事件之菜单滚动吸顶&&点击滑动到指定位置&&点击高亮

###菜单滚动吸顶效果:
这里写图片描述
这里写图片描述

###html:

        <section class="switchModule" id="switchModule">
            <div class="switchNavbar" id="switchNavbarId"  :class="searchBarFixed == true ? 'isFixed' :''">
                <div class="navbar__item activity" @click="activity()">
                            <div  :class="{switchAcitve:active=='activity'}">活动介绍</div>
                </div>
                <div class="navbar__item lastest" @click="lastest()">
                        <div  :class="{ switchAcitve:active=='lastest'}">最新配音</div>
                </div>
                <div class="navbar__item rank" @click="rank()">
                        <div  :class="{ switchAcitve:active=='rank'}">排行榜</div>
                </div>
            </div>
        </section>

js:
###data中声明数据

   data: function () {
            return {
                active: 'activity',
                scroll: '',
                select: -1,
                activeClass: {
                    background: '#eee'
                },
                searchBarFixed:false,
            };
        },

###mounted中给window添加一个滚动滚动监听事件

 mounted() {
            this.$nextTick(function () {
                //滚动监听事件
                window.addEventListener('scroll', this.menu)

            });
        },

###点击切换高亮效果

    methods: {
      //操作顶部tab
            activity() {
                 this.active = 'activity'
                var a_h = $("#activityIntro").offset().top;
                $('html,body').animate({ scrollTop: a_h }, 800);

            },
            lastest() {
                 this.active = 'lastest'
                var l_h = $("#lastestDubbing").offset().top;
                $('html,body').animate({ scrollTop: l_h }, 800);
 
            },
            rank() {
                this.active = 'rank'
                var r_h = $("#rankLlistDetail").offset().top;
                $('html,body').animate({ scrollTop: r_h }, 800);

            },
    }
//监听滚动的事件
   menu() {
                var _self = this;
                _self.scroll = document.documentElement.scrollTop || document.body.scrollTop;
                var menuTop = document.querySelector('#switchModule').offsetTop
                //console.log(_self.scroll)
                console.log(menuTop)
                //滑动到指定位置菜单吸顶
                if (_self.scroll > menuTop) {
                    this.searchBarFixed = true
                } else {
                    this.searchBarFixed = false
                }
                //滑动到指定位置相应菜单高亮
                var a_h = $("#activityIntro").offset().top;
                var l_h = $("#lastestDubbing").offset().top;
                var r_h = $("#rankLlistDetail").offset().top;
                if (_self.scroll < l_h) {
                    this.active = 'activity'
                } else if (_self.scroll < r_h) {
                    this.active = 'lastest'
                } else if (_self.scroll > r_h) {
                    this.active = 'rank'
                }
 
            },

###如果离开该页面需要移除这个监听的事件

        destroyed() {
            window.removeEventListener('scroll', this.menu)
        },

###css


    .isFixed {
        position: fixed;
        top: 0;
        z-index: 999;
    }
.switchNavbar {
    display: flex;
    position: relative;
    width: 100%;
    background: #fff;
    font-size: 0.307rem;
    color: #333333;
    letter-spacing: 0;
    text-align: justify;
}

完整代码如下:

<template>
    <div class="dubbing_activity">
        <!--@*头部logo*@-->
        <header>
            <div class="headerImg">
                <img :src="activityInfo.cover_image_url" alt="Alternate Text" />
            </div>
            <div class="headerText">
                <div class="headerTextL">
                    <p>{{activityInfo.name}}</p>
                    <div>{{activityInfo.name}},等你来挑战</div>
                </div>
            </div>
        </header>
        <!--跳转活动页-->
        <section class="btntwobox" v-if="showTwoTab">
            <ul>
                <li class="btnbg" @click="guanActivity()"><img src="/Images/common/dubbing_more_icon.png">更多活动</li>
                <li class="btnbg liright" @click="selfActivity()"><img src="/Images/common/dubbing_found_icon.png">自建活动</li>
            </ul>
        </section>
        <div class="empty"></div>
        <!--@*navbar*@-->
        <section class="switchModule" id="switchModule">
            <div class="switchNavbar" id="switchNavbarId" :class="searchBarFixed == true ? 'isFixed' :''">
                <div class="navbar__item activity" @click="activity()">
                    <div :class="{'switchAcitve':active=='activity'}">活动介绍</div>
                </div>
                <div class="navbar__item lastest" @click="lastest()">
                    <div :class="{'switchAcitve':active=='lastest'}">最新配音</div>
                </div>
                <div class="navbar__item rank" @click="rank()">
                    <div :class="{'switchAcitve':active=='rank'}">排行榜</div>
                </div>
            </div>
        </section>
        <!--@*part one*@-->
        <section class="regular_box" id="activityIntro">
            <!--@*活动报名*@-->
            <div class="sub_box  rule_bg" v-if="activityInfo.is_ended">
                <div class="min_title">比赛结果</div>
                <span v-if="activityInfo.meta_obj.results" v-html="ReplaceNewLine(activityInfo.meta_obj.results)"></span>
                <span v-if="!activityInfo.meta_obj.results">评审正在评选中,请耐心等待。</span>
            </div>
            <!--@*赛事简介*@-->
            <p class="sub_title topMar">赛事简介</p>
            <div class="sub_box  compit_bg">
                <span v-html="ReplaceNewLine(activityInfo.meta_obj.introduction)"></span>
                <br />
            </div>
            <!--@*参赛规则*@-->
            <p class="sub_title">参赛规则</p>
            <div class="sub_box  rule_bg">
                <span v-html="ReplaceNewLine(activityInfo.meta_obj.rules)"></span>
            </div>
            <!--@*奖励设置*@-->
            <p class="sub_title">奖励设置</p>
            <div class="sub_box  reward_bg">
                <span v-html="ReplaceNewLine(activityInfo.meta_obj.awards)"></span>
            </div>
        </section>
        <!--@*part two*@-->
        <!--@*最新配音*@-->
        <section class="newlast_dubbing" id="lastestDubbing">
            <div class="newlestTitle">
                <span class="new_ttile">最新配音</span>
                <router-link tag="span" :to="{path:'/dubbing-list'}" class="more">
                    更多
                </router-link>
            </div>
            <ul class="dubbing_ul" id="dubbing_ul">
                <li v-for="(item,index) in dubbingList" v-if="index < 4" v-bind:style="[select==index ? activeClass : '']" @touchstart="touchstart(index)" @touchend="touchend(index)" @click="linkDubbingList(item)">
                    <!--@*左  *@-->
                    <div class="li_l_img">
                        <img :src="item.image_url_origin" alt="Alternate Text" />
                    </div>
                    <!--@*中 *@-->
                    <div class="li_m_title">
                        <div class="top_title">{{item.title}}</div>
                        <div class="min_name">{{item.author_info.nick_name}}的作品</div>
                        <div class="bot_date">
                            <span>{{item.create_time.split('T')[0]}}</span>
                            <span class="play_detail" v-show="item.download_count">
                                <img class="playcount" src="/Images/common/activity_play_icons.png" alt="">
                                {{item.download_count}}次
                            </span>
                            <span class="play_detail" v-show="!item.download_count">
                                <img class="playcount" src="/Images/common/activity_play_icons.png" alt="">
                                0次
                            </span>
                        </div>
                    </div>
                    <!--@*右  *@-->
                    <div class="li_r_zan">
                        <span class="zan_count">{{item.like_count}}</span>
                        <img class="userZan" src="https://static.eudic.net/web/other/dubbing_like_icon@2x.png" alt="">
                    </div>
                </li>
            </ul>
        </section>
        <!--@*排行榜*@-->
        <section class="leaderboard" id="rankLlistDetail">
            <div class="leaderboardTitle">
                <span class="new_ttile">排行榜</span>
                <span class="more" @click="toggleRank()">排序</span>
            </div>
            <!--排序方式-->
            <ul class="rank_style rank_style_top" v-if="showRank&& rankList.length>=3">
                <li v-for="(item,index) in sortByStyle" v-bind:style="[sortSelect==index?activeClass:'']" @touchstart="touchSortStart(index)" @touchend="touchSortEnd(index)" @click="sortLikeCount(index)">
                    <span class="imgbox"><img v-show="rankType-1==index" class="selImg" src="/Images/common/dubbing_tick_img@2x.png" /></span>
                    <span class="selText">{{item.title}}</span>
                </li>
            </ul>
            <ul class="rank_style rank_style_down" v-if="showRank && rankList.length<3">
                <li v-for="(item,index) in sortByStyle" v-bind:style="[sortSelect==index?activeClass:'']" @touchstart="touchSortStart(index)" @touchend="touchSortEnd(index)" @click="sortLikeCount(index)">
                    <span class="imgbox"><img v-show="rankType-1==index" class="selImg" src="/Images/common/dubbing_tick_img@2x.png" /></span>
                    <span class="selText">{{item.title}}</span>
                </li>
            </ul>

            <!--排行榜列表-->
            <ul class="board_ul">
                <li v-for="(item,index) in rankList" v-bind:style="[selectlink==index ? activeClass : '']" @touchstart="touchstartlink(index)" @touchend="touchendlink(index)" @click="linkRankDubbing(item)">

                    <!--@* left *@-->
                    <div class="num">{{item.rank}}</div>
                    <!--@* right*@-->
                    <div class="person_box">
                        <div class="per_img">
                            <img :src="item.userInfo.avatarUrl" alt="Alternate Text" />
                        </div>
                        <div class="li_m_title">
                            <div class="top_title">{{item.userInfo.userName}}</div>
                            <div class="bot_date">
                                <span>{{item.last_update_time.split('T')[0]}}</span>
                                <span class="play_detail" v-show="item.download_count">
                                    <img class="playcount" src="/Images/common/activity_play_icons.png" alt="">{{item.download_count}}次
                                </span>
                            </div>
                        </div>
                        <div class="li_r_zan">
                            <span class="zan_count change_count">{{item.like_count}}</span>
                            <img class="userZan" src="https://static.eudic.net/web/other/dubbing_like_icon@2x.png" alt="">
                        </div>
                    </div>
                </li>
            </ul>
        </section>
        <!--@*活动报名中*@-->
        <section class="signUpBox" v-show="activityInfo.is_ended==false" @click="shareSignUp">
            <div v-show="!!tip||!haveSign">
                <van-button type="primary" class="buttonVan">{{button_text}}</van-button>
            </div>
            <div v-show="!tip&&haveSign">
                <van-button type="primary" class="buttonVan" v-if="user_dubbings_count>0">已完成{{user_dubbings_count}}个配音,继续配音</van-button>
                <van-button type="primary" class="buttonVan" v-if="user_dubbings_count<=0">立即配音</van-button>
            </div>
        </section>
        <!--活动结束-->
        <section class="signUpBox" v-show="activityInfo.is_ended==true">
            <div>
                <div class="signUpNow overActivity">活动已结束</div>
            </div>
        </section>
        <div v-if="showRank" class="blackBg" @click="hideRankUl()"></div>
        <!--微信中-->
        <div class="wxmask" @click="showInWX()" v-show="isWX==true">
            <div class="share_bg">
                <span>1. 点击屏幕右上角的按钮</span>
                <span class="span_two">2. 选择在浏览器中打开</span>
            </div>
        </div>
    </div>
</template>
<script>
        import { Button } from 'vant';
    export default {
        components: {
            [Button.name]: Button,
        },
        data: function () {
            var data1 = {
                sortByStyle: [
                    { title: '按点赞/单篇' },
                    { title: '按播放量/单篇' },
                    { title: '按点赞和播放量/单篇' },
                    { title: '按点赞/总和' },
                    { title: '按播放量/总和' },
                    { title: '按点赞和播放量/总和' },
                ],
                activityInfo: {
                    meta_obj: {
                        introduction: "",
                        awards: "",
                        rules: "",
                        results:""
                    }
                },
                dubbingList: [],
                haveSign: false,
                user_dubbings_count: 0,
                tip: global.app.tip,
                showRank: false,
                rankList: [],
                active: 'activity',
                scroll: global.app.detailScroll,
                rankType: global.app.rank_type,
                select: -1,
                selectlink: -1,
                sortSelect: -1,
                activeClass: {
                    background: '#eee'
                },
                activeGrey: {
                    background: '#f7f7f7'
                },
                searchBarFixed: false,
                isAddZan: false,
                zanAdd: false,
                count: '',
                grayShow: false,
                isWX: false,
                page: 1,
                button_text: '',
                is_extending: true,
                showTwoTab: false,
            }
            return data1;
        },
        created() {
            var _self = this;
            _self.activityInfo = global.app.event_detail;
            //获取最新配音列表
            this.$http.get('/Dubbing/GetRecentDubbingEventDubbingInfos?eventid=' + global.app.event_id + '&page=1&numberofrows=10', {
            })
                .then(function (response) {
                    _self.dubbingList = response.data;
                })
                .catch(function (error) {
                    console.log(error);
                });
            if (!is_share) {
            this.$http.get('/Dubbing/UserHasJoinedEvent?eventid=' + global.app.event_id + '&userid=' + global.app.userid, {
            })
                .then(function (response) {
                    _self.user_dubbings_count = response.data.user_dubbings_count;
                })
                .catch(function (error) {
                    console.log(error);
                });
            }
        },

        mounted() {
            this.$nextTick(function () {
                var _self = this;
                this.rankLists();
                _self.scroll = 0;
                //报名成功之后,底部就变成了立即配音
                if (!is_share) {
                    if (_self.$route.query.value == "nowDubbing") {
                        global.app.has_joined = true;
                    }
                    _self.showTwoTab = true;
                }
                //判断用户是否已报名
                _self.button_text = "立即报名";
                if (!is_share) {
                    _self.haveSign = global.app.has_joined;
                    if (_self.haveSign) {
                        _self.button_text = "立即配音";
                    }
                }
                //滚动监听事件
                window.addEventListener('scroll', this.menu);
            });
        },

        methods: {
            ReplaceNewLine(content)
            {
                var string = content;
                try {
                    string = string.replace(/\r\n/g, "<br/>")
                    string = string.replace(/\n/g, "<br/>");
                } catch (e) {
                    ;
                }
                return string;
            },
            //跳转到官方活动
            guanActivity() {
                window.location.href = "/Dubbing/EventHome?userId=" + global.app.userid + '#/';
            },
            selfActivity() {
                window.location.href = "/Dubbing/EventHome?userId=" + global.app.userid + '&tab=users#/';
            },
            //排行榜链接跳转
            linkRankDubbing(e) {
                if (this.rankType <= global.app.dubbing_rank_type.dubbing_like_download_count_single) {
                    window.location.href = global.app.user_dubbing_url.replace("=dubbing_id", "=" + e.dubbing_id).replace("=uuid", "=" + e.uuid).replace("=action_data", "=" +e.dubbing_id);
                } else {
                    //window.location.href = "/dubbing/eventworks?userid=" + e.guid_user_id + "&eventid="+global.app.event_id;
                    this.$router.push({ path: '/userdubbing-list/'+e.guid_user_id })
                }
            },
            showInWX() {
                this.isWX = false;
            },
            //打开分享
            shareSignUp() {
                var _self = this;
                //微信内置浏览器
                if (is_weixin_browser) {
                    this.isWX = true;
                } else if (!is_share) {//软件内部浏览器
                    if (!!_self.tip) {
                        _self.button_text = _self.tip
                    }
                    else if (!_self.haveSign) {
                        this.$router.push({ path: '/sign-up' })
                    } else {
                        this.$router.push({ path: '/set-dubbing' })
                    }
                } else {//非微信。非软件内部
                    window.location.href = global.app.app_event_detail_share_url;
                    setTimeout(function () {
                        window.location.href = global.app.download_url;
                    }, 2000)
                }
            },
            touchstartGrey() {
                this.grayShow = true;
            },
            touchendGrey() {
                this.grayShow = false;
            },
            touchstart(i) {
                this.select = i;
            },
            touchend(i) {
                this.select = -1;
            },
            touchstartlink(i) {
                this.selectlink = i;
            },
            touchendlink(i) {
                this.selectlink = -1;
            },
            touchSortStart(i) {
                this.sortSelect = i;
            },
            touchSortEnd(i) {
                this.sortSelect = -1;
            },
            //最新配音列表跳转
            linkDubbingList(e) {
                window.location.href = global.app.ting_app_url_schema + "://x-callback-url/tingAction?item_action=24&dubbing_id=" + e.dubbing_uuid + "&uuid=" + e.uuid + "&action_data=" + e.dubbing_uuid ;
            },
            //选择排序方式
            sortLikeCount(i) {
                this.rankType = i + 1;
                global.app.rank_type = this.rankType;
                this.rankLists();
                this.showRank = false;
            },
            //显示隐藏排序方式
            toggleRank() {
                this.showRank = !this.showRank;
            },
            hideRankUl() {
                this.showRank = false;
            },
            //操作顶部tab
            activity() {
                this.active = 'activity';
                var a_h = $("#activityIntro").offset().top-40;
                $('html,body').animate({ scrollTop: a_h }, 400);
            },
            lastest() {
                this.active = 'lastest';
                var l_h = $("#lastestDubbing").offset().top-40;
                $('html,body').animate({ scrollTop: l_h }, 400);
            },
            rank() {
                this.active = 'rank';
                var r_h = $("#rankLlistDetail").offset().top-40;
                $('html,body').animate({ scrollTop: r_h }, 400);
            },
            rankLists() {
                //排行榜
                this.page = 0;
                var _self = this;
                self.is_extending = true;
                this.$http.get('/Dubbing/GetDubbingEventUserRanks?eventid=' + global.app.event_id + '&page='+ 1 +'&numberofrows=20&LeaderBoardType=' + this.rankType, {
                })
                    .then(function (response) {
                        _self.page = 1;
                        _self.rankList = response.data;
                        self.is_extending = false;
                    })
                    .catch(function (error) {
                        console.log(error);
                        self.is_extending = false;
                    });
            },
            extendRankLists() {
                //排行榜
                var _self = this;
                self.is_extending = true;
                this.$http.get('/Dubbing/GetDubbingEventUserRanks?eventid=' + global.app.event_id + '&page=' + (this.page+1) + '&numberofrows=20&LeaderBoardType=' + this.rankType, {
                })
                    .then(function (response) {
                        _self.page++;
                        _self.rankList = _self.rankList.concat(response.data);
                        _self.rankList = _self.rankList.sort(_self.sortRank);
                        self.is_extending = false;
                    })
                    .catch(function (error) {
                        console.log(error);
                        self.is_extending = false;
                    });
            },
            sortRank(a, b) {
                return a.rank - b.rank;
            },
            //监听页面滚动
            menu() {
                var _self = this;
                _self.scroll = document.documentElement.scrollTop || document.body.scrollTop;
                var menuTop = document.querySelector('#switchModule').offsetTop;
                //滑动到指定位置菜单吸顶
                if (_self.scroll > menuTop) {
                    this.searchBarFixed = true
                } else {
                    this.searchBarFixed = false
                }
                //滑动到指定位置相应菜单高亮
                var a_h = $("#activityIntro").offset().top - 50;
                var l_h = $("#lastestDubbing").offset().top - 50;
                var r_h = $("#rankLlistDetail").offset().top - 50;
                if (_self.scroll < l_h) {
                    this.active = 'activity';
                } else if (_self.scroll > l_h && _self.scroll < r_h) {
                    this.active = 'lastest';
                } else if (_self.scroll > r_h) {
                    this.active = 'rank';
                }

                //分页加载数据
                //滚动的距离 +   整个窗口的高度>内容可视区域的高度
                if (_self.scroll + window.innerHeight >= document.documentElement.offsetHeight) {
                    if (self.is_extending) {
                        return;
                    }
                    _self.extendRankLists();
                }
            },
        },
        destroyed() {
            window.removeEventListener('scroll', this.menu)
        },
    }

</script>
<style>
    .dubbing_activity {
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
    }

    .slide-right-enter-active,
    .slide-right-leave-active,
    .slide-left-enter-active,
    .slide-left-leave-active {
        will-change: transform;
        transition: all .3s ease;
        position: absolute;
        width: 100%;
        left: 0;
    }

    .slide-right-enter {
        transform: translateX(-100%);
    }

    .slide-right-leave-active {
        transform: translateX(100%);
    }

    .slide-left-enter {
        transform: translateX(100%);
    }

    .slide-left-leave-active {
        transform: translateX(-100%);
    }

    .rank_style {
        width: 3.3rem;
        height: 3.56rem;
        position: absolute;
        top: 0.7rem;
        right: 0.2rem;
        z-index: 999999;
        text-align: left;
        font-size: 0.256rem;
        color: #444;
        background: url("/Images/common/bubble_img_white.png") no-repeat;
        background-size: 100% 100%;
        background-position: 100% center;
    }

    .rank_style_down {
        top: -3.55rem;
        background: url("/Images/common/bubble_img_down_white.png") no-repeat;
        background-size: 100% 100%;
        background-position: 100% center;
        padding-bottom: 0.1rem;
        padding-top: 0.2rem;
    }

    .rank_style_top {
        padding-top: 0.35rem;
    }

    .rank_style li {
        display: flex;
        align-items: center;
        width: 3.16rem;
        height: 0.55rem;
        padding-left: 0.15rem;
        line-height: 0.5rem;
        letter-spacing: 1px;
    }

    .board_ul {
        padding-bottom: 30px;
    }


    .isFixed {
        position: fixed !important;
        top: 0;
        z-index: 999;
    }

    .isAdd {
        color: #FF8620;
    }

    .dubbing_activity .grayBjHover {
        position: absolute !important;
        top: 0;
        left: 0;
        width: 93%;
        height: 40px;
        z-index: 20;
        background: rgba(0, 0, 0, 0.2);
        margin-left: 0.239rem;
        margin-top: 14px;
    }

    .activeSpan {
        background: #ccc;
    }

    .imgbox {
        display: inline-block;
        width: 0.393rem;
    }

    .selImg {
        flex: 1;
        display: inline-block;
        width: 15px;
        height: 12px;
        margin-right: 14px;
    }

    .selText {
        display: inline-block;
        flex: 10;
    }

    .blackBg {
        position: fixed;
        top: 0;
        height: 100%;
        width: 100%;
        display: block;
        background: rgba(0,0,0,.15);
        z-index: 99999;
    }

    .wxmask {
        position: fixed;
        height: 62px;
        width: 100%;
        top: 0;
        /* background: rgba(0,0,0,.5); */
        z-index: 1000;
        display: block;
    }

        .wxmask .share_bg {
            background: url(/Images/common/share_background.png) center center no-repeat;
            background-size: 100% 100%;
            position: fixed;
            top: 0;
            right: 0;
            width: 56%;
            height: 62px;
            padding-left: 9px;
        }

    .share_bg span {
        display: block;
        color: #fff;
        font-size: 14px;
        position: relative;
        top: 13px;
    }

    .span_two {
        margin-top: 3px;
    }

    .overActivity {
        background: #ccc !important;
    }

    * {
        margin: 0px;
        padding: 0px;
    }

    img {
        width: 100%;
        vertical-align: middle;
    }

    body {
        background: #f5f5f5;
        font-size: 0.273rem;
    }

    body, html {
        font-family: PingFangSC-Regular,-apple-system-font,"Helvetica Neue","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
        color: #444444;
    }

    .dubbing_activity {
        padding-bottom: 40px;
        position: relative;
    }

    header, section {
        background: #fff;
    }

    .empty {
        height: 8px;
        background: #F8F8F8;
        border: 1 solid #F0F0F0;
    }

    section {
        padding: 0 0.256rem;
    }

    .headerImg {
        height: 3.21rem;
    }

        .headerImg img {
            height: 3.21rem;
        }

    .headerText {
        padding: 0.358rem 0.256rem;
        display: flex;
    }

    .headerTextL p {
        font-size: 0.307rem;
        color: #333333;
        margin-bottom: 0.137rem;
        font-weight: 600;
    }

    .headerTextL > div {
        font-size: 0.239rem;
        color: #666666;
        letter-spacing: 0;
        text-align: justify;
        line-height: 0.358rem;
    }

    .headerTextL {
        flex: 5;
        padding-right: 0.683rem;
    }

    .switchModule {
        padding: 0;
        width: 100%;
        height: 0.819rem;
    }

    .switchNavbar {
        display: flex;
        position: relative;
        width: 100%;
        background: #fff;
        font-size: 0.307rem;
        color: #333333;
        letter-spacing: 0;
        text-align: justify;
    }

    .navbar__item {
        position: relative;
        display: block;
        -webkit-box-flex: 1;
        -webkit-flex: 1;
        flex: 1;
        padding: 13px 0;
        text-align: center;
        font-size: 0.256rem;
        -webkit-tap-highlight-color: rgba(0,0,0,0);
    }

        .navbar__item div {
            width: 54%;
            margin: 0 auto;
        }

    .switchAcitve {
        color: #51ABFF;
        border-bottom: 2px solid #51ABFF;
    }

    .signUp {
        height: 69px;
        background: url("https://static-main.frdic.com/web/dubbing/notice_banner.png") no-repeat;
        /*background: url("https://static.eudic.net/web/dubbing/notice_banner.png") no-repeat;*/
        background-size: 100% 100%;
        display: flex;
        padding-left: 1.7rem;
        border-radius: 5px;
    }

    .m_sign {
        display: flex;
        flex: 1;
        flex-direction: column;
        justify-content: center;
    }

        .m_sign span {
            display: block;
        }

    .span_top {
        font-size: 0.273rem;
        color: #F78530;
    }

    .span_bot {
        font-size: 0.205rem;
        color: #9B9B9B;
    }

    .dubbingNow {
        flex: 0.6;
        height: 25px;
        line-height: 69px;
        text-align: center;
    }

        .dubbingNow a {
            display: inline-block;
            width: 1.161rem;
            line-height: 25px;
            color: #fff;
            background: linear-gradient(to right, #F76B1C,#FBDA61 );
            box-shadow: 0 2px 2px 0 #F4D49E;
            border-radius: 15px;
            font-size: 0.205rem;
            text-align: center;
        }

    .sub_title {
        padding: 20px 0;
        font-size: 0.307rem;
        color: #444444;
        font-weight: bold;
    }

    .sub_box {
        border-radius: 5px;
        padding: 15px;
        box-sizing: border-box;
    }

        .sub_box span {
            display: inline-block;
            margin-top: 15px;
            font-size: 0.239rem;
        }

    .regular_box {
    }

    .compit_bg {
        border: 0.5px solid #D7EBFF;
        background: #F5FAFF;
    }

    .rule_bg {
        background: #FFFBF3;
        border: 0.5px solid #FFE7BF;
    }

    .reward_bg {
        background: #F8FFFB;
        border: 0.5px solid #CDECDD;
    }

    .color_blue {
        color: #478DE5;
    }

    .color_grey {
        color: #8F8F8F;
    }

    .sub_box span:first-child {
        margin-top: 0px;
    }

    .min_title {
        font-size: 0.273rem;
        text-align: center;
        font-weight: bold;
    }

    .mar_top {
        margin-top: 15px;
    }

    .newlast_dubbing {
        margin-top: 8px;
    }

    .newlestTitle {
        padding: 20px 0 10px 0;
        line-height: 0.4rem;
    }

        .newlestTitle .new_ttile {
            font-size: 0.307rem;
            font-weight: bold;
        }

        .newlestTitle .more {
            float: right;
            font-size: 0.222rem;
            color: #A9B0B5;
        }

    .dubbing_ul li {
        height: 1.71rem;
        border-bottom: 1px solid #EAEAEA;
        box-sizing: border-box;
    }

    .dubbing_ul li {
        display: flex;
        align-items: center;
        text-decoration: none;
    }

    .dubbing_ul .li_l_img {
        flex: 4.4;
        overflow: hidden;
        position: relative;
    }

        .dubbing_ul .li_l_img img {
            width: 1.707rem;
            height: 1.229rem;
            display: block;
            border-radius: 5px;
        }

    .li_m_title {
        flex: 8;
        margin-left: 0.256rem;
        padding-right: 0.24rem;
    }

        .li_m_title .top_title {
            font-size: 0.273rem;
            color: #444;
            -webkit-box-orient: vertical;
            -webkit-line-clamp: 1;
            overflow: hidden;
            text-overflow: ellipsis;
            margin-top: 0;
            display: -webkit-box;
        }

        .li_m_title .min_name {
            font-size: 0.239rem;
            color: #8F8F8F;
            margin: 0.068rem 0;
        }

        .li_m_title .bot_date {
            font-size: 0.239rem;
            color: #8F8F8F;
            display: flex;
            align-items: center;
        }

    .play_detail {
        height: 0.239rem;
        line-height: 0.27rem;
        margin-left: 0.3rem;
        display: flex;
        font-size: 0.239rem;
    }

        .play_detail .playcount {
            display:inline-block;
            width: 0.239rem;
            height: 0.239rem;
            padding-right: 5px;
            vertical-align: text-top;
        }

    .dubbing_ul .li_r_zan {
        flex: 1;
        display: flex;
        margin-top: -0.887rem;
        height: 0.307rem;
        line-height: 0.307rem;
        align-items: center;
    }

    .zan_count {
        font-size: 0.239rem;
        color: #8F8F8F;
        margin-right: 0.1rem;
        height:18px;
        line-height:22px;
    }

    .userZan {
        width: 0.307rem;
        height: 0.307rem;
    }

    .leaderboard {
        margin-top: 8px;
        position: relative;
    }

    .leaderboardTitle {
        padding: 20px 0 10px 0;
    }

        .leaderboardTitle .new_ttile {
            font-size: 0.307rem;
            font-weight: bold;
        }

        .leaderboardTitle .more {
            float: right;
            font-size: 0.222rem;
            color: #A9B0B5;
        }

    .board_ul .num {
        flex: 1;
        display: flex;
        align-items: center;
        font-size: 0.239rem;
        color: #8C8C8C;
    }

    .person_box .per_img {
        flex: 2;
    }

    .per_img img {
        width: 0.649rem;
        height: 0.649rem;
        border-radius: 50%;
        border: 1px solid #dfdfdf;
    }

    .board_ul li {
        display: flex;
        height: 1.161rem;
    }

        .board_ul li .person_box {
            flex: 14;
            display: flex;
            align-items: center;
            border-bottom: 0.5px solid #ECECEC;
        }

    .person_box .li_m_title {
        flex: 8;
        margin-left: 5px;
    }

    .person_box .li_r_zan {
        flex: 2;
        display: flex;
        margin-top: -0.358rem;
        align-items: center;
        height: 0.307rem;
        line-height:0.307rem;
    }

    .person_box .userZan {
        width: 0.307rem;
        height: 0.307rem;
        display: inline-block;
        vertical-align: text-bottom;
    }

    .signUpBox {
        width: 93%;
        position: fixed;
        padding: 0.239rem 0.256rem;
        bottom: 0px;
        height: 40px;
        line-height: 40px;
        z-index: 99998;
    }

        .signUpBox .signUpNow {
            height: 40px;
            background: #51ABFF;
            border-radius: 5px;
            color: #fff;
            text-align: center;
        }

    .blackBj {
        position: fixed;
        top: 0;
        height: 100%;
        width: 100%;
        display: none;
        background: rgba(0,0,0,.3);
        z-index: 99999;
    }

    .signPage {
        width: 92%;
        z-index: 999999;
        position: fixed;
    }

        .signPage .sign_title {
            font-size: 0.307rem;
            padding: 20px 0;
            font-weight: bold;
        }

        .signPage .sign_detail {
            font-size: 0.239rem;
            margin-bottom: 10px;
        }

    .sign_detail .left_q {
        color: #8F8F8F;
    }

    .sign_detail .edit {
        color: #8F8F8F;
        float: right;
    }

    .signOkInfo {
        font-size: 0.205rem;
        color: #8F8F8F;
    }

    .signUp_box {
        position: absolute;
        bottom: 20px;
        bottom: 0px;
        width: 92%;
        height: 40px;
        line-height: 40px;
        padding: 0.239rem 0;
    }

    .signUp_now {
        height: 40px;
        background: #51ABFF;
        border-radius: 5px;
        color: #fff;
        text-align: center;
    }

    .inputEmail {
        padding-bottom: 0.1rem;
        border: none;
        /*border-bottom: 1px solid #ccc;*/
        outline: none;
        border-radius: 0;
    }

    .switchNavbar a {
        color: #696969;
    }

    /*最新配音列表*/
    .channel_box {
        position: relative;
        height: 1.673rem;
        border-bottom: 0.5px solid #E6E6E6;
        background-color: #fff;
        font-size: 0.239rem;
        padding: 0.24rem 0.239rem;
    }

    .channel_contain {
        height: 1.25rem;
        padding: 0px;
        display: flex;
        align-items: center;
    }

    .chan_img {
        height: 100%;
        align-items: center;
        display: flex;
        flex: 3;
    }

    .chan_title {
        flex: 8;
        display: flex;
        flex-direction: column;
        /*justify-content: center;*/
        margin-left: 0.256rem;
        position: relative;
        height: 100%;
    }

    .m_title {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 1;
        overflow: hidden;
        text-overflow: ellipsis;
        margin-top: 0;
        display: -webkit-box;
    }

    .m_titledes {
        font-size: 0.222rem;
        color: #696969;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box;
        margin-top: 0.1rem;
    }

    .chan_title .m_title {
        color: #444;
        font-size: 0.273rem;
    }

    .chan_title .m_time {
        color: #858585;
        font-size: 0.239rem;
        position: absolute;
        bottom: 0;
        display: inline-block
    }

    .chan_img img {
        width: 1.71rem;
        height: 1.23rem;
        border-radius: 5px;
    }

    .confirm_video {
        position: fixed;
        bottom: 0;
        width: 93%;
        height: 40px;
        line-height: 40px;
        background: #51ABFF;
        text-align: center;
        background: #fff;
        padding: 10px 0.239rem;
    }

        .confirm_video span {
            display: inline-block;
            width: 100%;
            height: 40px;
            line-height: 40px;
            background: #51ABFF;
            text-align: center;
            border-radius: 5px;
            font-size: 0.239rem;
            color: #fff;
        }

    .chan_bot {
        display: flex;
        font-size: 0.201rem;
        color: #8F8F8F;
        margin-top: 0.171rem;
    }

        .chan_bot .bot_l {
            flex: 1.7;
        }

            .chan_bot .bot_l img {
                width: 10px;
                height: 10px;
            }

    .bot_l .down_num {
        margin-left: 3px;
    }

    .chan_bot .bot_m {
        flex: 2;
    }

        .chan_bot .bot_m img {
            width: 10px;
            height: 10px;
        }

    .bot_m .tim_num {
        margin-left: 5px;
    }

    .bot_r {
        flex: 1;
        text-align: right;
    }


    /*设置配音页面*/
    body {
        background: #fff;
    }

    .setDubbingBox {
        background: #fff;
    }

    .ul_list {
        position: relative;
        padding: 0.239rem;
    }

        .ul_list li {
            display: inline-block;
            width: 2.87rem;
            height: 2.5rem;
            background-color: #fff;
            font-size: 0.239rem;
        }

            .ul_list li:nth-child(even) {
                float: right;
            }

    .video_img {
    }

        .video_img img {
            border-radius: 5px;
            width: 100%;
            height: 1.6rem;
        }

    img {
        width: 100%;
        height: 1.5rem;
    }

    .video_title {
        padding-top: 0.05rem;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        text-overflow: ellipsis;
        overflow: hidden;
        color: #444;
        font-size: 0.256rem;
    }

    .van-checkbox {
        float: left;
        position: relative;
        top: 0.5rem;
        left: 0.1rem;
        z-index: 99;
    }

    .van-checkbox__icon {
        border-radius: 20px;
    }

    .activeVideo {
        color: #fff;
        border-color: #06bf04;
        background-color: #06bf04;
    }


    input[type=checkbox] {
        position: relative;
        width: 10px;
        height: 1px;
    }

        input[type=checkbox]::before {
            content: '';
            position: absolute;
            top: 0.2rem;
            left: 0.1rem;
            width: 22px;
            height: 22px;
            line-height: 22px;
            text-align: center;
            color: white;
            font-size: 0.239rem;
            background-color: transparent;
            border: 1px solid #999;
            border-radius: 30px;
        }

        input[type=checkbox]:checked::before {
            font-family: FontAwesome;
            color: #fff;
            border-color: #06bf04;
            background-color: #06bf04;
            content: "\f00c";
        }

    .confirm_video {
        position: fixed;
        bottom: 0;
        width: 100%;
        height: 40px;
        line-height: 40px;
        background: #51ABFF;
        text-align: center;
    }

        .confirm_video span {
            color: #fff;
        }

    .ch_label {
        position: absolute;
        display: inline-block;
        width: 2.87rem;
        height: 1.6rem;
    }

    body.en .newWeui-btn {
        background: #43a1c7;
    }

    body.en .newWeui-btn_plain-primary {
        border: 1px solid #43a1c7;
    }

    body.de .newWeui-btn {
        background: #37ac1a;
    }

    body.de .newWeui-btn_plain-primary {
        border: 1px solid #37ac1a;
    }

    body.fr .newWeui-btn {
        background: #2695e0;
    }

    body.fr .newWeui-btn_plain-primary {
        border: 1px solid #2695e0;
    }

    body.es .newWeui-btn {
        background: #a6203b;
    }

    body.es .newWeui-btn_plain-primary {
        border: 1px solid #a6203b;
    }

    .buttonVanNone {
        background: #fff !important;
    }

    .buttonVan {
        width: 100%;
        height: 40px !important;
        line-height: 40px !important;
        font-size: 16px !important;
    }

    .buttonVanShort {
        width: 100%;
        height: 40px !important;
        line-height: 40px !important;
        background: #fff !important;
        color: #51abff !important;
        border-color: #51abff !important;
        font-size: 16px !important;
    }
    .signUpBox .van-button {
        margin: 0;
        padding: 0;
        width: 100% !important;
    }
    .topMar {
        padding-top: 10px;
    }

    .btntwobox {
        margin-bottom: 20px;
        position:relative;
    }

        .btntwobox li {
            display: inline-block;
            padding: 9px 0;
            line-height: normal;
            width: 47.5%;
            background: #FAFAFA;
            border: 0.5px solid #EEEEEE;
            border-radius: 5px;
            text-align: center;
            font-size: 0.239rem;
        }

        .btntwobox img {
            width: 0.273rem;
            height: 0.273rem;
            margin-right: 10px;
            position: relative;
            top:-1px;
        }

        .btntwobox .liright {
            float: right;
        }
</style>

完整页面展示(一个页面,从上往下滑动的截图):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值