基于vue-cli开发的浏览器主页

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

现在的浏览器主页多种多样

不同的浏览器往往有着相同的特点----广告,各种新闻,游戏推销,有时候想切换搜索引擎也比较麻烦

有这样的

360---(https://hao.360.com/)

一大堆广告,各种奇怪的网友推荐,垃圾新闻.........

搜狗---(https://123.sogou.com/?fr=rescue)

2345-----(https://www.2345.com/indexold.htm)

如Edge和Chrome还好些,但是很多国产浏览器主页属实是一言难尽。。

为此,作为前端工程师的我们,为什么不自己开发一款浏览器呢

下面是我基于vue-cli开发的浏览器主页

背景较为简洁(其实是没找到好图)可以快速切换不同的搜索引擎,还有一键切换背景(目前是在项目目录下的几张图片间切换

下面是开发的流程,莫得耐心的小伙伴也可以直接去文章尾部看代码

首先找个项目要放的地方在终端中执行下列代码完成初始化

vue create 项目名

然后选择版本,这里选择Manually select features

键盘上下控制移动 回车确定

在下一个页面中选择 空格表示选中 再摁一下取消 最后的选择应该如下

这个小项目装这俩就行了

image.png

然后回车到下一页,版本选择2

再下一页选择Less就可以

然后选择In package.json

最后选择N就可以

找到目录

可以在src/assets下放一些图片,然后在代码中引入

找到App.vue文件,加入以下代码 完成

启动项目切换到项目所在的目录 然后输入

npm run serve

就可以启动项目了 ctrl+c可以停止

五个单选框一键切换不同的搜索引擎

输入框内输入要搜索的内容 右边的🔍开始搜索 也可以使用快捷键 摁下回车进行搜索

点击搜索框上方的图片切换背景 也可以使用快捷键 Alt + c一键切换背景

App.vue中的全部代码如下

<template>
  <div>
    <img id="bgGlobal3" src="./assets/kqh.jpg" class="imgClassBody2">
    <img id="bgGlobal2" src="./assets/ymx.jpg" class="imgClassBody2">
    <img id="bgGlobal" src="./assets/oys2.jpg" class="imgClassBody">
    <!-- 搜索框上方 有一个图片 可以点击 完成切换背景 也有一个Alt + c一键切换背景 -->
    <button id="bkg" class="imgClass" @click="bkgChange()"><img id="imgGlobal" src="./assets/oys.png" alt="点击切换背景"  class="imgClass1"></button>
    <input @keyup.enter="btnEvent" class="inputClass" type="text" id="input" name="input" placeholder="请输入您要搜索的内容" autocomplete="off">
    <button id="btn" class="btnClass" @click="btnEvent()">🔍</button><br/>
    <span class="spanClass">>>>>>>>选择您的搜索引擎
      <!-- 设置单选框 -->
    <input type="radio" name="choose" value="baidu" checked>百度
    <input type="radio" name="choose" value="souhu">搜狗
    <input type="radio" name="choose" value="bing">bing
    <input type="radio" name="choose" value="360">360
    <input type="radio" name="choose" value="Yandex">Yandex
    </span>
  </div>
</template>

<script>
  export default {
    mounted(){
      const that = this;
      document.addEventListener('keydown',that.changeByKey);
    },
    methods:{
      btnEvent(){
        var ch = document.getElementsByName('choose');
        console.log(ch);
        for(let i = 0;i < ch.length;i++){
          if(ch[i].checked){
              console.log('选择的是'+ch[i].value);
              var result = ch[i].value;
              }
            }
            if(result === 'baidu'){
                console.log('使用百度搜索引擎进行搜索');
                let dSearch = document.getElementById('input').value;
                window.open(`https://www.baidu.com/s?wd=${dSearch}`);
                dSearch.value = "";
                //https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD&rsv_spt=1&rsv_iqid=0x9848a36f004c2dea&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&rqlang=&tn=baiduhome_pg&ch=
            }
            else if(result === 'bing'){
                console.log('使用Bing进行搜索');
                let dSearch = document.getElementById('input').value;
                window.open(`https://cn.bing.com/search?q=${dSearch}`);
                //https://cn.bing.com/search?q=%E4%BD%A0%E5%A5%BD
                dSearch.value = "";
            }
            else if(result === 'souhu'){
                console.log('使用搜狗进行搜索');
                //https://www.sogou.com/web?ie=UTF-8&query=%E4%BD%A0%E5%A5%BD
                //https://www.sogou.com/web?ie=UTF-8&query=你好
                let dSearch = document.getElementById('input').value;
                window.open(`https://www.sogou.com/web?ie=UTF-8&query=${dSearch}`);
                dSearch.value = "";
                //https://www.sogou.com/
            }
            else if(result === '360'){
                console.log('使用360进行搜索');
                let dSearch = document.getElementById('input').value;
                window.open(`https://www.so.com/s?ie=utf-8&fr=none&src=360sou_newhome&ssid=&q=${dSearch}`);
                dSearch.value = "";
                // https://www.so.com/s?ie=utf-8&fr=none&src=360sou_newhome&ssid=&q=%E4%BD%A0%E5%A5%BD
            }
            else {
              console.log('Yandex搜索');
              let dSearch = document.getElementById('input').value;
              window.open(`https://yandex.com/search/?text=${dSearch}`);
              dSearch.value = "";
              //https://yandex.com/search/?text=%E4%BD%A0%E5%A5%BD&lr=21449
            }
        },
        bkgChange(){
          console.log('开始换背景');
          var bgGlobal = document.getElementById('bgGlobal');
          var bgGlobal2 = document.getElementById('bgGlobal2');
          var bgGloba3 = document.getElementById('bgGlobal3');
          if(bgGlobal.className === 'imgClassBody' && bgGlobal2.className === 'imgClassBody2'){
            bgGlobal.className = 'imgClassBody2';
            bgGlobal2.className = 'imgClassBody';
            console.log('2');
          }
          else if(bgGlobal2.className === 'imgClassBody' && bgGlobal3.className === 'imgClassBody2'){
            bgGlobal2.className = 'imgClassBody2';
            bgGlobal3.className = 'imgClassBody';
            console.log('3');
          }
          else {
            bgGloba3.className = 'imgClassBody2';
            bgGlobal.className = 'imgClassBody';
            console.log('1');
          }
        },
        changeByKey(e){
        if(e.altKey && e.keyCode===67){
                console.log('successfully');
                this.bkgChange();
            }
      }
    }
  }
  
  
</script>

<style lang="less">
input[type='radio'] {
  width: 25px;
  height: 25px;
}
input[type='radio']:checked{
  background-color:brown;
  color: aquamarine;
}
.imgClassBody {
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: -1;
  position: absolute;
}
.imgClassBody2 {
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: -1;
  position: absolute;
  display: none;
}
.imgClassBody3 {
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  z-index: -1;
  position: absolute;
  display: none;
}
.spanClass {
  color:darkblue;
  font-size: 23px;
  margin-left: 480px;
  margin-top: 30px;
  overflow: hidden;
}
.btnClass {
  background-color:aqua;
  padding-top: 3px;
  padding-bottom: 10px;
  border-color: blue;
  border-style:dotted ;
  border-radius: 20px;
  margin-left: 10px;
  width: 60px;
  height: 60px;
  font-size: 26px;
}
.inputClass {
  margin-left: 480px;
  margin-top: 20px;
  width: 480px;
  height: 55px;
  background-color: antiquewhite;
  color:brown;
  font-size: 25px;
  border-color: chartreuse;
  border-style: dotted;
  margin-bottom: 20px;
}
.inputClass:focus {
  outline-color: orangered;
  outline-width: 5px;

}
  .imgClass {
    margin-top: 45px;
    margin-left: 630px;
    width: 140px;
    height: 90px;
    border: 0px;
  }
  .imgClass1 {
    margin-left: -5px;
    width: 140px;
    height: 90px;
    border: 0px;
  }
</style>

核心是通过javaScript中的location.open来打开对应的搜索引擎搜索出结果的网页。