`
axl234
  • 浏览: 268467 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

支持链接到新页面的锚点平滑跳转

 
阅读更多

//页内锚点滑动效果
$("html,body").animate({scrollTop: $("#box").offset().top}, 1000);

更具体详细的方法

//页内锚点滑动效果,来自http://www.learningjquery.com/的方法
$('a[href*=#]').click(function() {
        if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname){
                var $target = $(this.hash);
                $target = $target.length && $target|| $('[name=' + this.hash.slice(1) +']');
                 if ($target.length) {
                        var targetOffset = $target.offset().top;
                        $('html,body').animate({scrollTop: targetOffset}, 1000);
                        //return false; //使其呈现清晰的URL链接
                }
         }  
});

 


网上有很多锚点平滑滚动的javascript脚本下载,但是很多脚本需要手工在XHTML上写入鼠标事件,更加别说支持链接到新页面的锚点了。而AnchorArt.js却可以做到一次引入自动给页面带锚点的链接添加平滑滚动效果,并且支持链接到新页面的锚点!AnchorArt.js(压缩版)仅仅只有2KB大小!

关于链接到新页面的锚点平滑滚动的思路:

如果A页面打开url带锚点的B页面(#号),那么浏览器在页面下载完毕后自动跳到相应的锚点上,据我所知还没有办法阻止这个浏览器默认的行为。
但是如果B页面没有对应的锚点浏览器就不会进行跳转了,所以我们在url的锚点附加一点额外的信息那就可以让浏览器不进行调转了,接下来我们的脚本就可以通过锚点附加的参数进行平滑滚动操作了。
所有的操作通过绑定事件完成,在脚本没有运行的时候也不会破坏原有锚点的功能
所以我在网上一搜“锚点平滑滚动”结果一大堆,选择了个写的比较简洁的脚本,按照上面的思路给它写个事件绑定和接收锚点参数滚动的效果于是就出了AnchorArt.js。

/*
AnchorArt.js
平滑锚点跳转[支持新窗口打开的页面]
www.planeArt.cn
2009.08.25
*/

//页面加载完成执行函数
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != ‘function’) {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(function() {
allLinks();//绑定链接
pageInit();//获取锚点参数执行跳转
});

// 转换为数字
function intval(v){
v = parseInt(v);
return isNaN(v) ? 0 : v;
}

// 获取元素信息
function getPos(e){
var l = 0;
var t = 0;
var w = intval(e.style.width);
var h = intval(e.style.height);
var wb = e.offsetWidth;
var hb = e.offsetHeight;
while (e.offsetParent){
l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);
e = e.offsetParent;
}
l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);
t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);
return {x:l, y:t, w:w, h:h, wb:wb, hb:hb};
}

// 获取滚动条信息
function getScroll() {
var t, l, w, h;
if (document.documentElement && document.documentElement.scrollTop) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
return { t: t, l: l, w: w, h: h };
}

// 滚动
var $sr=1;//防止同时执行多个跳转
function scroller(el, duration){
if(typeof el != ‘object’) { el = document.getElementById(el); }
if(!el) return;
var z = this;
z.el = el;
z.p = getPos(el);
z.s = getScroll();
z.clear = function(){window.clearInterval(z.timer);z.timer=null};
z.t=(new Date).getTime();
z.step = function(){
var t = (new Date).getTime();
var p = (t – z.t) / duration;
if (t >= duration + z.t) {
z.clear();
window.setTimeout(function(){z.scroll(z.p.y, z.p.x)},13);
$sr=1;
} else {
st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t;
sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l;
z.scroll(st, sl);
}
};
z.scroll = function (t, l){window.scrollTo(l, t)};
z.timer = window.setInterval(function(){z.step();},13);
$sr=0;
}

//给页面锚点添加额外的参数
function goAnchor(href,target){
u=href.split(“#”);
if (target==”) target=’_self’;
if (target==’_self’ && $sr==1) scroller(u[1],800);
window.open(u[0] + ‘#anchor=’ + u[1],target=target);
}
function allLinks(){
var allLinks = document.getElementsByTagName(‘a’);
for (var i=0;i
var lnk = allLinks[i];
if ((lnk.href && lnk.href.indexOf(‘#’) != -1)) {
lnk.onclick=function(evt){
if ($sr==1) goAnchor(this.href,this.target);
return false;
}
}
}
}

//接收页面锚点参数执行平滑跳转
function pageInit(){
hash=window.location.hash.split(“#anchor=”);
scroller(hash[1],800);
}

分享到:
评论

相关推荐

    JS锚点平滑跳转

    JavaScript 锚点平滑跳转是一种在网页中实现页面内部导航时提供平滑过渡效果的技术。传统的HTML锚点链接可以直接跳转到页面内的某个特定位置,但这种跳转通常是瞬间完成,缺乏用户体验上的平滑性。JS锚点平滑跳转则...

    AngularJS实现的锚点楼层跳转功能示例

    锚点跳转是一种在页面内部跳转到指定部分的功能,常用于长页面,使得用户可以快速定位到页面的指定区域。实现锚点跳转通常需要两个步骤:一是在页面中设置具有唯一ID的目标位置,二是通过链接或者按钮触发跳转事件,...

    jQuery锚点带动画跳转特效特效代码

    例如,`<a name="section1"></a>`定义了一个名为"section1"的锚点,用户点击链接`跳转到第1节</a>`时,浏览器会滚动到页面上对应的"section1"位置。 jQuery锚点动画跳转特效则是在这个基础上增加了动画效果,使得...

    html 网页 页面 内 跳转

    - 用户体验提升:用户无需等待整个新页面加载,只需页面局部滚动即可到达目标位置。 - 便于导航:长页面内容可以通过锚点链接进行分割,使用户能快速找到所需信息。 缺点: - SEO影响:搜索引擎可能无法识别页面内...

    JS 锚点

    7. **历史记录管理**:为了让浏览器的前进后退功能正常工作,可以使用`history.pushState`和`popstate`事件更新URL状态而不实际加载新页面。 在实际应用中,JS锚点常用于单页应用(SPA)和长页面的导航。通过结合...

    jQuery 锚点跳转滚动条平滑滚动一句话代码

    1. jQuery实现锚点跳转滚动条平滑滚动的代码示例: 文件中提供的核心代码为: ```javascript $("html,body").animate({scrollTop:$("#box").offset().top},1000); ``` 该代码通过jQuery的animate方法,使得页面滚动...

    javascript实现锚点

    JavaScript 实现锚点是一种常见的网页交互技术,它允许用户点击页面上的链接,快速跳转到同一页面的特定位置。在网页开发中,锚点通常用于长页面的导航,让用户能够轻松地访问页面内的各个部分。这篇文章将深入探讨...

    原创左右两列框架锚点滚动Jquery插件

    锚点链接(Anchor Links)是HTML中的一个重要概念,它允许我们通过点击链接直接跳转到同一页面的特定位置。在这个插件中,锚点链接与页面的各个模块对应,当用户点击导航菜单中的某个项时,页面会平滑滚动到相应的...

    JS控制div跳转到指定的位置的几种解决方案总结

    在Web开发中,页面内的导航跳转到特定的内容位置是一项常见需求。本文介绍了几种使用JavaScript实现页面滚动到指定div位置的解决方案。这些方法主要包括锚点法、jQuery的animate方法、window.scrollTo方法和...

    jQuery城市电梯锚点导航代码.zip

    锚点导航是网页设计中的一种常见技术,它允许用户通过点击导航链接直接跳转到页面的特定部分。在“jQuery城市电梯锚点导航代码”中,这一功能得到了巧妙的应用。当用户点击导航菜单中的某个选项时,页面会平滑滚动至...

    jQuery实现的回到首页带锚点代码.rar

    `event.preventDefault()`阻止了浏览器的默认行为,即跳转到新URL。`$('html, body').animate()`方法用于平滑滚动到页面顶部,参数`scrollTop: 0`表示滚动到顶部,`800`是动画执行的时长。 如果需要返回首页并跳转...

    jquery+css3实现的导航跳转到指定位置特效源码.zip

    在本资源中,我们关注的是一个使用jQuery和CSS3技术实现的导航菜单,该菜单具有在页面内平滑跳转到指定位置的功能。这个特效源码可以帮助开发者为他们的网站增添互动性和用户体验。以下是对这个技术实现的详细解析:...

    jQuery实现锚点scoll效果实例分析

    5. 执行动画滚动效果:使用jQuery的animate函数来实现平滑滚动到目标锚点位置。animate函数的第一个参数是一个对象,指定了需要变化的属性,此处为scrollTop。第二个参数是动画持续时间,这里设置为1000毫秒,即1秒...

    JavaScript - Simple Anchor Scroll Using AngularJS.zip

    然后,我们可以通过链接来直接跳转到这个锚点: ```html <a href="#section1">Go to Section 1 ``` 在纯 JavaScript 中,我们可以监听 `click` 事件并使用 `window.scrollTo()` 方法来实现平滑滚动效果。但是,当...

    smooth scroll平滑滚动的网页菜单实例代码.rar

    在网页设计中,平滑滚动(Smooth Scroll)是一种常见的交互效果,它使得用户在点击页面内的链接时,页面能够以平滑、流畅的方式过渡到目标位置,而不是瞬间跳转。这种效果大大提升了用户体验,尤其在长篇内容或者...

    jQuery侧边栏固定层锚点定位特效代码

    4. **锚点链接**:HTML的`<a>`标签配合`href="#section"`属性,可以创建锚点链接,让用户点击后迅速跳转到页面的特定部分。 5. **响应式设计**:考虑到不同的设备和屏幕尺寸,可能需要调整侧边栏的显示方式。可以...

    JS实现页面内跳转的简单代码

    这行代码会立即跳转到`id`为`aa`的元素,但没有动画效果。 2. **使用`scrollTo`或`scrollBy`**: 如果需要平滑滚动效果,可以使用`window.scrollTo`方法。不过,这种方法需要配合一些计算来实现平滑过渡: ```...

    viewpager循环滑动自动滑动

    当页面滑动到末尾时,为了实现循环效果,需要手动跳转到起始页面,反之亦然。 3. **循环滑动**: `ViewPager` 默认不支持循环滑动,但是可以通过自定义适配器或者利用`PagerAdapter` 的`instantiateItem()` 和`...

    SmoothONePageScroll单页面滚动

    3. **锚点链接**:为了方便用户通过点击导航菜单直接跳转到特定的部分,插件会处理锚点链接(如`#section1`),确保点击后能平滑滚动到对应位置。 4. **性能优化**:为了提高用户体验,插件可能包含了一些性能优化...

    让网页跳转到指定位置的jquery代码非书签

    在网页设计中,有时我们需要实现一个功能,使得用户点击某个链接或者按钮后,页面能够自动滚动到特定的位置,而不是直接跳转到新的页面。这种功能通常用于网站内部导航,帮助用户快速定位到页面的某个区域。jQuery...

Global site tag (gtag.js) - Google Analytics