码迷,mamicode.com
首页 > Web开发 > 详细

一站式网站

时间:2016-07-20 01:11:36      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

传统的网站,页面跳转通常是通过多个html页面实现的。但是这样用户体验不是很好,如果使用一站式,网站内容都在一个html页面上,会大大提高用户体验,而且是网站更快更流畅。

为了能实现一站式的效果,我主要用了html5和hash值的相关内容,兼容高版本的浏览器,下面是一个小列子:

首先,在html页面中添加ul标签,来模拟页面的菜单

<ul>
    <li><a href="javascript:;" data-hash="index">首页</a></li>
    <li><a href="javascript:;" data-hash="disc">人物简介</a></li>
    <li><a href="javascript:;" data-hash="thing">生平事迹</a></li>
</ul>

在a标签中,我用了html5中的自定义属性,命名为data-hash,这里的每一项都对应着相应的内容,通过点击每一项,相应的内容就会显示出来,因为上面的是菜单,所以还需要具体页面内容。

我用了三个div来作为内容包裹的容器

<div data-hash="index">我是首页的内容,我简短精悍但十分重要</div>
<div data-hash="disc">我是人物的简介</div>
<div data-hash="thing">这一生就是无数传奇的集合</div>

这三个div标签都添加data-hash的属性,属性值与上面菜单一一对应,通过这个设置,就可以让菜单项与页面显示内容对应起来了。

ps:页面的css代码很简单,就不列出来了,无非就是让li左浮动,然后给div清除浮动以及设置display为none。

然后javascript代码部分,我的具体思路是:先获取页面的a元素以及div元素,再通过循环,来获取a元素的点击事件,在事件处理函数中,我需要获得当前点击元素的data-hash值,然后将这个hash值覆给当前的url,接下来,再写一个循环,用来比较当前的hash值与哪个div的hash相等,若找到相应的元素,就应该把该元素的display属性设置为block,为了让之后的每一次点击都只有需要的那部分内容显示,还需要在循环中让所有的div都隐藏后再来寻找相应元素。

菜单部分的功能基本实现,但为了能让url与下面的内容对应起来,也就是在url中改变hash值,会出现对应页面,我在javascript文件中又添加了一部分代码,先要获得当前的location的hash,再通过字符串截取的方法获得hash值(没有#),再去和div的data-hash的值进行对比,找到相应的div并把它显示出来。

为了解决使用hash后页面不刷新的问题,我是用了onhashchange事件句柄,让hash值改变了,页面就重新加载,实现刷新。

详细代码如下:

window.onload = function(){
            var oA = document.getElementsByTagName("a");
            var oDiv = document.getElementsByTagName("div");
            var aL = oA.length;
            var dL = oDiv.length;

            for(var i = 0;i<aL;i++){
                oA[i].onclick = function(){
                    var hash = this.dataset.hash;
                    window.location.hash = hash;
                    for(var i = 0;i<dL;i++){
                        oDiv[i].style.display = "none";
                        if(hash === oDiv[i].dataset.hash){
                            oDiv[i].style.display = "block";
                        }
                    }
                }
            }
            window.onhashchange = function(){
                window.location.reload();
            }
            var headHash = window.location.hash.substring(1)||"index";
            for(var i = 0;i<dL;i++){
                if(headHash === oDiv[i].dataset.hash){
                    oDiv[i].style.display = "block";
                }
            }
        }

 

一站式网站

标签:

原文地址:http://www.cnblogs.com/zhangtaiqingqing/p/5686744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!