浏览器插件——一键滑动页面顶/底部

前言

仅提供思路和参考代码,代码的编写每个人的风格不一样。前半部分不涉及原理,只介绍操作步骤。原理在后记进行补充。本文开发的插件针对谷歌内核的浏览器,如chrome、edge、QQ浏览器等,不同浏览器的开发可能会有部分区别。

新建文件(夹)

新建一个文件夹,在文件夹里新建两个文件manifest.json、app.js。其中manifest.json配置文件名字不可更改,app.js文件名可自定义。

  • 一键滑动页面插件(文件夹名字可自定义)
    • manifest.json
    • app.js(名字可自定义)

代码

manifest.json

{
    "manifest_version": 3,
    "name": "页面滚动底部顶部插件V2.0",
    "description": "右键一键滑动至页面顶/底部",
    "version": "2.0",
    "content_scripts": [{
        "matches": ["<all_urls>"],
        "js": ["app.js"]
    }]
}

app.js

let x1;
let y1;
let x2;
let y2;

// 鼠标右键按下
document.addEventListener('mousedown', function(e) {
    // 记录移动起始坐标
    if (e.button == 2) {
        x1 = e.screenX;
        y1 = e.screenY;
    }
})

// 鼠标右键弹起
document.addEventListener('mouseup', function(e) {
    // 记录移动结束坐标
    if (e.button == 2) {
        x2 = e.screenX;
        y2 = e.screenY;
        let moveX = Math.abs(x2 - x1);
        let moveY = Math.abs(y2 - y1);
        
        // 鼠标左右移动距离小于50px,上下移动超过10px,视为用户想要滑动至页面顶/底部
        if (moveX < 50 && moveY > 10) {
            document.addEventListener('contextmenu', fn);
            y2 - y1 > 0 ? window.scrollTo(0, document.body.scrollHeight) : window.scrollTo(0, 0);
        }
        // 如果鼠标移动范围没超过,则不移动,默认显示右键菜单
        else{
            document.removeEventListener('contextmenu', fn);
        }
    }
})

// 阻止浏览器中默认事件的发生,本插件用于阻止右键菜单弹出
let fn = function(e) {
    e.preventDefault();
}

导入文件夹

chrome浏览器,在地址栏输入chrome://extensions/,勾选开发者模式,点击加载已解压的扩展程序,选择文件夹导入。
在这里插入图片描述
edge浏览器,在地址栏输入edge://extensions/,同理
在这里插入图片描述

后记

manifest.json

manifest.json 文件对于谷歌浏览器插件是必不可少的。manifest.json 文件是插件的配置文件,它必须位于插件的根目录,并且必须遵循特定的 JSON 格式,它告诉浏览器如何处理插件以及插件的行为。
manifest.json文件中有几个配置字段是必须提供的:

{
    "manifest_version": 3,
    "name": "你的插件的名字",
    "version": "x.x"
}

manifest_version通常为3,版本为2的逐渐被淘汰。
name是插件的名字,必须提供。
version是插件的版本号,格式通常为"主版本号.次版本号.修订版本号"。
此时若你的文件夹中只有一个manifest.json文件,且配置文件中已有这三个字段,则可以将该文件夹作为插件导入浏览器中,只不过此时插件无功能实现。

content_scripts

本插件需要实现特定功能,因此需要引入字段content_scripts,用于定义应该注入到网页中的js和css。这些脚本和样式表通常用于修改网页的行为、外观或添加特定功能。
“matches”: [“<all_urls>”]意思是匹配所有网页,对所有网页注入js或css。也可以改成特定的网站,或者用通配符匹配满足条件的网站。
“js”: [“app.js”],本例中注入了一个app.js文件,可以在匹配的网页中实现自定义的功能。
“css”,注入样式表,改变网页的样式,这个我没有试过,插件主要用来实现功能,比较少用来改样式。

js代码

本插件是通过记录右键按下时的坐标和弹起时的坐标之间的变化情况,来判断用户是否想要滑动页面至顶/底部。逻辑简单,故而代码也简单。对于js代码部分不作解释,代码中有部分注释帮助理解。
相信你有一定的网页开发基础,代码会比我编写得更好。

ViewPager是一个Android中的View容器,可以让用户在多个页面之间进行滑动切换。要实现多页面滑动切换以及动画效果,可以按照以下步骤: 1. 在XML布局文件中添加ViewPager控件,并添加对应的布局文件,例如: ``` <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在Java代码中为ViewPager设置Adapter,用于显示多个页面。例如: ``` ViewPager viewPager = findViewById(R.id.viewPager); MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); ``` 其中,MyPagerAdapter是自定义的PagerAdapter类,需要继承自FragmentPagerAdapter或FragmentStatePagerAdapter。 3. 在自定义的PagerAdapter类中实现getItem()方法,用于返回每个页面的Fragment实例。例如: ``` @Override public Fragment getItem(int position) { switch (position) { case 0: return new Fragment1(); case 1: return new Fragment2(); case 2: return new Fragment3(); default: return null; } } ``` 其中,Fragment1、Fragment2、Fragment3是自定义的Fragment类,用于显示对应页面的内容。 4. 如果需要添加页面切换的动画效果,可以在Java代码中为ViewPager设置PageTransformer。例如: ``` viewPager.setPageTransformer(true, new DepthPageTransformer()); ``` 其中,DepthPageTransformer是自定义的PageTransformer类,用于实现页面切换时的动画效果。可以参考以下代码示例: ``` public class DepthPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.75f; public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // [-Infinity,-1) // This page is way off-screen to the left. view.setAlpha(0f); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1f); view.setTranslationX(0f); view.setScaleX(1f); view.setScaleY(1f); } else if (position <= 1) { // (0,1] // Fade the page out. view.setAlpha(1 - position); // Counteract the default slide transition view.setTranslationX(pageWidth * -position); // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0f); } } } ``` 以上就是实现Android中ViewPager多页面滑动切换以及动画效果的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值