vue楼层跳跃组件

1.scrollnav.js

function _select(elem) {
	elem.addClass('yh-selected').text(elem.attr('yh-data-title'));
}

function _unselect(elem) {
	elem.removeClass('yh-selected').text("F" + elem.attr('yh-data-index'));
}

var mixin = {
	mounted() {
		var elem = $(this.$el);
		var root = $("<div>", { class: "yh-scroll-nav" }).appendTo(elem);
		var i = 1;
		var anchors = $('.yh-page-anchor', elem);
		var n = anchors.length;
		anchors.each(function (elem) {
			var div = $(this);
			var title = div.attr('yh-data-title');
			if (!title) {
				title = div.text();
			}
			if (title == undefined || title.length == 0) {
				title = "F" + i;
			}
			var a = $("<a>", {
				href: "#" + div.attr('id'),
				'yh-data-index': i,
				'yh-data-title': title
			})
				.text("F" + i)
				.on('click', function () {
					var elem = $(this);
					if (!elem.hasClass('yh-selected')) {
						Waypoint.disableAll()
						_unselect($('.yh-selected', root));
						_select(elem, true);
						setTimeout(function () {
							Waypoint.enableAll()
						}, 500);
					}
				});
			var param = {
				handler: function () {
					var eid = this.element.id;
					var selected = $('.yh-selected', root);
					if (selected.attr('href') != '#' + eid) {
						_unselect(selected);
						_select($("a[href='#" + eid + "']", root));
					}
				}
			};
			if (i == n) {
				param.offset = 'bottom-in-view';
			} else if (i > 1) {
				param.offset = '30%';
			}
			div.waypoint(param);
			root.append(a);
			++i
		});
	}
}

export default mixin

2.ScrollNavDemo.vue

<template>
  <div class="yh-page">
    <div id="f1" class="yh-page-anchor floor" yh-data-title="模块一">
      <h3>页面导航演示</h3>
      <div class="desc">
        Demo源代码:
        <code>/examples/components/modules/ScrollNavDemo.vue</code>
      </div>
    </div>
    <div id="f2" class="yh-page-anchor floor" yh-data-title="模块二">
      <h4>引用方法</h4>
      <ol>
        <li style="margin-bottom:10px">
          添加mixin:
          <code>mixins:[yhfront.ui.mixins.scrollnav]</code>
        </li>
        <li>添加yh-page-anchor至需要导航的div,该div需要设置id属性。</li>
        <li>通过设置div的yh-data-title属性,指明导航区块title,否则使用div.text()</li>
      </ol>
    </div>
    <div id="f3" class="yh-page-anchor floor" yh-data-title="用户查询">F3</div>
    <div id="f4" class="yh-page-anchor floor">F4</div>
    <div id="f5" class="yh-page-anchor floor">F5</div>
  </div>
</template>
<script>
import { mixin } from "../../assets/scrollnav";
export default {
  mixins: [mixin],
  name: "ScrollNavDemo",
  data() {
    return {};
  },
  props: [],
  methods: {}
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style>
div.floor {
  min-height: 200px;
  background-color: #ececec;
  margin: 10px;
}
</style>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于Vue· 美籍华人尤雨溪所作,文档健全,生态完整,与脸谱的React各领前端半边天下;· 相对于React,Vue相对于初学者更容易上手;· 目前统治C端市场的跨平台框架uni-app也是基于Vue的基础技术栈进行开发;· Vue与React在框架设计上有极高的相似度,上手Vue以后,我们可以轻松过渡到React学习;课程特色· 零基础教学,由浅入深,轻松诙谐,物超所值;· 基于官方文档教学,在学习Vue的同时学习阅读文档的方式,授人以鱼更授人以渔;· 课程包含Vuex和Vue-Router最新版内容,即所谓【Vue全家桶开发】;· 完整包含Vue3全部内容;· 含京东商城完整项目从零到一开发过程;· 含最新版@vue/cli的开发和生产环境打包流程;· 含Vite两套脚手架的开发和生产环境打包流程;· 含项目部署上线全流程;· 含自定义组件库高阶课程,带你从零到一完成电梯组件开发与发布;· 附Vue高频面试题50余道,OFFER轻松斩获;课程收益· 掌握Vue2+Vue3的框架基础知识;· 掌握Vue全家桶项目开发+打包+上线全流程;· 掌握自定义组件库技巧;· 掌握Vue高频面试题回答技巧;课程关键词Vue2 Vue3 Vuex Vue-RouterVue项目 Vue全家桶@vue/cli Vite 项目打包 项目上线 自定义组件Vue面试题写在最后就连太阳光照到地球都需要8分钟,所以,你也需要时间,耐心一点,持续修炼。 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值