`
zhc0822
  • 浏览: 230534 次
  • 性别: Icon_minigender_1
  • 来自: 宝仔的奇幻城堡
社区版块
存档分类
最新评论

一个简单的Chrome扩展——Back to Top(附源码)

阅读更多

在浏览长网页比如twitter、facebook时,为了返回页面顶部,常常需要拖动浏览器的滚动条,实在不方便。于是我给自己的chrome写了这样一个扩展,能够快速地返回页面顶部。

猛击此处安装该扩展程序

效果如下图所示:


有关chrome扩展的入门教程,请参阅http://code.google.com/chrome/extensions/getstarted.html

先来介绍一下这款扩展的思路:在页面右下角插入一个返回页面顶部的图标,点击该图标,便滚动页面。当然,也支持快捷键操作。

下面先来看一下该扩展的目录结构。



top.js用于在网页中插入一个图标,该脚本只在顶层被注入,以免网页的每一个frame中都会生成一个图标。代码如下:

 

function initIcon(addIcon){
	ext_btt_addIcon=addIcon;
	changeUi();
}

function changeUi(){
	var a=document.getElementById('ext_btt');
	if(a!=null)
		a.parentNode.removeChild(a);
		
	if(ext_btt_addIcon){
		var a=document.createElement('a');
		a.id='ext_btt';
		a.style.zIndex=19881211;
		a.href='#';
		var img=document.createElement('img');
		var imgURL = chrome.extension.getURL('images/icon.png');
		img.src=imgURL;
		img.width=32;
		img.height=32;
		img.style.border='none';
		a.appendChild(img);
		a.onclick=function(){
			chrome.extension.sendRequest({});
			return false;
		};
		document.body.appendChild(a);
	}
}
 

frame.js用于在网页的每一个frame中添加滚动的代码,该脚本必须注入到每一个frame中。比如在gmail中,收件箱的主体部分其实是一个子frame,如果不注入每一个frame,则无法实现回到顶部的效果。代码如下:

 

document.onkeydown=function(){
	if(!ext_btt_hotkeys) return;
	var a=window.event.keyCode; 
	if((a==38)&&(event.altKey)) {
		chrome.extension.sendRequest({});
	}
};

function initHotkeys(hotkeys){
	ext_btt_hotkeys=hotkeys;
}

function goTop(animation, acceleration, time) {
	if(!animation){
		window.scrollTo(0, 0);
		return;
	}
	acceleration = acceleration || 0.3;
	time = time || 20;
 
	var x1 = 0;
	var y1 = 0;
	var x2 = 0;
	var y2 = 0;
	var x3 = 0;
	var y3 = 0;
 
	if (document.documentElement) {
		x1 = document.documentElement.scrollLeft || 0;
		y1 = document.documentElement.scrollTop || 0;
	}
	if (document.body) {
		x2 = document.body.scrollLeft || 0;
		y2 = document.body.scrollTop || 0;
	}
	var x3 = window.scrollX || 0;
	var y3 = window.scrollY || 0;
 
	var x = Math.max(x1, Math.max(x2, x3));
	var y = Math.max(y1, Math.max(y2, y3));
 
	var speed = 1 + acceleration;
	window.scrollTo(Math.floor(x / speed), Math.floor(y / speed));
 
	if(x > 0 || y > 0) {
		var invokeFunction = "goTop('" + animation + "', " + acceleration + ", " + time + ")";
		window.setTimeout(invokeFunction, time);
	}
}
 

style.css用于设定插入网页的图标的样式。

下面让我们来看一看background.html。

这个文件好比一个应用程序的main函数。代码如下:

 

<script>
chrome.browserAction.onClicked.addListener(function(tab) {
	chrome.tabs.executeScript(null, {code: "goTop(" + string2Bool(localStorage.animation) + ");", allFrames: true});
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
	initialize(tabId);
});
chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo) {
	initialize(tabId);
});
chrome.extension.onRequest.addListener(
  function() {
    chrome.tabs.executeScript(null, {code: "goTop(" + string2Bool(localStorage.animation) + ");", allFrames: true});
});

function initialize(tabId){
	chrome.tabs.executeScript(tabId, {file: "top.js"});
	chrome.tabs.insertCSS(tabId, {file: "style.css"});
	chrome.tabs.executeScript(tabId, {file: "frame.js", allFrames: true}, function(){
		chrome.tabs.executeScript(tabId,
							{code: "initIcon(" + string2Bool(localStorage.addIcon) + ");"});
		chrome.tabs.executeScript(tabId,
							{code: "initHotkeys(" + string2Bool(localStorage.hotkeys) + ");", allFrames: true});
	});
}

function string2Bool(string){
	return string=='false'?false:true;
}
</script>

 具体的API使用方法,请查阅Tabs(用于控制标签页行为)的文档:http://code.google.com/chrome/extensions/tabs.html

 

最后,再来看看options.html这个文件。该文件是扩展的选项文件。在chrome中,选项值是通过html5的localstorage来存储的。这里,我们提供了三个选项:



 选项值是bool值。值得注意的是,localstorage会将bool值的true或false转换为string类型的"true"和"false"来存储,对照background.html你会发现,string2Bool这个函数提供了两者间的转换。

好的,至此,我们的back to top扩展就完成了。


如上图所示,在扩展程序的管理页中,点击按钮,选定扩展所在的目录,你就可以载入你刚刚写好的扩展,在浏览器中进行调试了。

 

最后,依然附上源码。

感兴趣的同学依然可以对这款扩展进行完善:比如提供更多图标样式;提供滚动速度的选项;当页面长度超过一屏时才显示返回顶部图标等等。

  • 大小: 2.9 KB
  • 大小: 2.4 KB
  • 大小: 3.8 KB
  • 大小: 30.7 KB
7
8
分享到:
评论
4 楼 yrjie 2012-09-15  
谢谢LZ吖,正在学习chrome插件,有问题的话可以问你么?
3 楼 zhc0822 2011-12-03  
ZeaLoVe 写道
为什么你这么好的文章老被踩啊。。。

^_^,可能是因为写得太浅显了吧。
2 楼 ZeaLoVe 2011-12-03  
为什么你这么好的文章老被踩啊。。。
1 楼 andyjackson 2011-03-24  
几天不见,楼主又发新东东啦 必须赞

相关推荐

    BackToTop “返回顶部” 页面组件

    至于提供的压缩包文件"BackToTop",很可能是包含了实现这一功能的源码示例或者是一个完整的组件库。解压后,可以查看源码学习具体的实现细节,包括如何绑定事件、如何设置样式和动画效果等。这对于提升前端开发技能...

    vue-backtotop:Vue.js的Back-to-top组件,单击后可将页面滚动到顶部

    Vue Backtotop组件 Vue.js的Back-to-top组件,单击后可将页面滚动到顶部 演示版 参见。 通过npm安装 npm install vue-backtotop --save 导入和使用 导入以供全球使用 import Vue from 'vue' import BackToTop from ...

    backToTop_v0.1

    在IT行业中,"backToTop_v0.1"可能是一个网页或软件应用的插件,其主要功能是为了方便用户快速返回页面顶部。"Quick backToTop_v0.1"的描述进一步表明,这是一个快速返回顶部功能的升级版,可能是为了提供更高效的...

    IBM汇编——简单计算器汇编源码

    描述部分进一步确认了这段代码的功能,即为一个简单计算器的汇编源码,其主要目标是实现基本的计算功能。 #### 标签解读 - **汇编**: 表示这是用汇编语言编写的程序。 - **计算器**: 指出程序的功能是进行基本的...

    BackToTop.vue

    BackToTop.vue

    安卓Android源码——任务管理器源码.zip

    在安卓(Android)系统中,任务管理器是一个至关重要的组件,它负责监控和管理设备上的应用进程,确保系统的稳定运行和资源的有效分配。本压缩包包含的“安卓Android源码——任务管理器源码.zip”提供了对Android...

    tink-back-to-top-angular-源码.rar

    【标题】"tink-back-to-top-angular-源码"指的是一个使用Angular框架实现的返回顶部功能的源代码库。这个库可能包含实现页面滚动到顶部交互的组件、服务和其他相关资源,旨在帮助开发者轻松地在自己的Angular应用中...

    BackToTop 置顶组件(VUE2 后台)

    BackToTop 置顶组件

    js+css实现回到顶部按钮(back to top).docx

    首先,我们需要在HTML中添加一个id为"back-to-top"的p元素,并在其中添加一个a标签,href属性设置为"#top",表示回到页面的顶部。 在CSS中,我们需要设置p#back-to-top的样式,使其固定在页面的右下角,并设置a标签...

    Back To Top for Chrome-crx插件

    - **返回顶部/底部按钮**:Back To Top for Chrome在浏览器的工具栏上添加了一个图标,用户只需点击或双击这个图标,页面就会瞬间滚动至顶部或底部。这一设计使得用户无需手动滚动鼠标或使用键盘快捷键,就能轻松...

    安卓Android源码——精典源码之MyBrowser(简单网页浏览器).zip

    【安卓Android源码——经典源码之MyBrowser(简单网页浏览器)】 在安卓开发中,构建一个简单的网页浏览器是学习Android应用开发基础的好方法。MyBrowser项目是一个初级开发者经常参考的示例,它展示了如何利用...

    vanilla-back-to-top:简单流畅的Back to Top按钮

    香草回到顶部 简单,微小的Back To Top按钮,没有依赖项。 在顶部时隐藏,在单击时平滑向上滚动。 同样适用于 , , 以及在 , 和上没有框架的产品特点顶部隐藏单击时平滑向上滚动最新的类似的用户体验与兼容没有...

    back-to-top-button-js.rar_back

    总之,“back-to-top-button-js.rar_back”压缩包提供的资源帮助我们了解如何利用JavaScript和HTML创建一个功能完善的返回顶部按钮。这个功能不仅可以提升网站的易用性,还能为用户提供更流畅的浏览体验。在实际项目...

    jQuery下的返回顶部功能的实现实例页面

    为了实现返回顶部的功能,我们创建一个名为`backtoTop.js`的JavaScript文件。在这个文件中,我们需要编写jQuery代码来监听滚动事件并处理按钮的显示和隐藏,以及点击事件来实现返回顶部的动作。以下是`backtoTop.js`...

    安卓Android源码——浏览器的源码 可以下载修改跳转指定的网址.zip

    这份"安卓Android源码——浏览器的源码 可以下载修改跳转指定的网址.zip"压缩包提供了一个基础的浏览器应用源码,允许开发者进行定制,比如修改默认的网址跳转。下面我们将深入探讨这个源码中的关键知识点。 1. **...

    手机按键值——测试,java文件及源码

    在IT行业中,手机按键值的测试是移动设备软件开发中的一个重要环节。这涉及到对用户界面(UI)的交互性以及输入事件处理的准确性进行验证。Java作为一种广泛应用的编程语言,经常被用于开发移动应用,因此理解如何在...

    【练习向】jQuery基础教程第四版章节源码——Book05_jQuery_操作DOM

    jQuery是一个广泛使用的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等任务。在这个"Book05_jQuery_操作DOM"的章节中,我们将深入探讨jQuery如何高效地操作DOM元素。 首先,jQuery的核心是选择...

    Android源码——用户界面之重写onKeyDown方法源码_new_60.zip

    在这个“Android源码——用户界面之重写onKeyDown方法源码_new_60”压缩包中,我们可以深入理解如何通过重写`onKeyDown`方法来捕获并响应用户的按键事件。这篇文章将详细探讨`onKeyDown`方法的工作原理,以及如何在...

    Angular-vanilla-back-to-top.zip

    Angular-vanilla-back-to-top.zip,简单流畅的背对背扣,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

Global site tag (gtag.js) - Google Analytics