制作web端的图片搜索站点(看冰冰)

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 制作web端的图片搜索站点(看冰冰)

前言

大家好,我是yma16,本文分享制作web端的图片搜索站点。

antdeisgnvue image用法

代码嵌入:

<template>
  <a-image
    :width="200"
    src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
  />
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({});
</script>

预览

发布链接:http://yongma16.xyz/emoji/index/

pc端

手机端

github地址:点击传送

例:搜索央视主持人王冰冰则出现冰冰的图片(可选择缩放)

背景

有时候聊天,斗图找不到图片以级想欣赏精致的五官和风景放松心情,同时近期又在使用vue3+antd,所以想制作一个图片搜索引擎的站点。

技术选型

前端:vue3+antd+axios

后端:django的爬虫制作接口(模拟百度搜索图片返回搜索结果的json数据)

思路

前端:

目录结构

trickers前端项目           
├─public
│      favicon.ico
│      index.html
└─src
    │  App.vue
    │  main.js
    │  tricher.txt
    ├─assets
    │      background.png
    │      happy.gif
    ├─components
    │      Home.vue
    ├─emoji
    │      Emoji.vue
    └─services
            getEmojiApi.js

后端:

ui框架

ant-design-vue

主要代码块:

<template>
  <div class="emoji">
    <a-spin :spinning="spinning" :delay="delay" class="home-emoji-loading">
      <div class="emoji-img">
        <a-card :title="searchTitle ? '关键词:' + searchTitle : '欢迎搜索图片与表情包'">
          <template v-for="(item, index) in showEmoji.showImg" :key="index">
            <!-- <a-card-grid class="grid-img-class"> -->
            <a-image :src="item" class="card-img-image" />
            <!-- </a-card-grid> -->
          </template>
        </a-card>
      </div>
      <!-- 分页 -->
      <div class="emoji-page">
        <a-pagination
          v-model:current="pageData.crurentPage"
          :page-size="pageData.splitNum"
          @change="gotoCurrentPage(pageData.crurentPage, pageData.total)"
          :total="pageData.total"
          :show-total="(total) => `总共 ${total} 记录`"
        />
      </div>
    </a-spin>
  </div>
</template>
<script>
import { reactive, onMounted, toRefs, watch } from "vue";
export default {
  name: "Emoji",
  props: {
    spinning: Boolean,
    delay: Number,
    emojiData: Array,
    emojiTotal: Number,
    searchWords: String,
    searchTitle: String,
  },
  setup(props) {
    const { emojiData } = toRefs(props);
    const cardTitle = reactive({
      title: "搜索结果",
    });
    const pageData = reactive({
      crurentPage: 1,
      total: emojiData.value.length,
      splitNum: 15,
    });
    // 展示数据
    const showEmoji = reactive({
      showImg: [],
    });
    // 制作一个分页,一页有十张图片
    function pageSplit() {
      if (emojiData && emojiData !== []) {
        // 存在
        pageData.crurentPage = 1;
        showEmoji.showImg = [];
        pageData.total = props.emojiTotal;
        if (props.pageTotal <= pageData.splitNum) {
          // 开始分页
          showEmoji.showImg = emojiData;
        } else {
          for (let imgLoc = 0; imgLoc < pageData.splitNum; ++imgLoc) {
            showEmoji.showImg.push(props.emojiData[imgLoc]);
          }
        }
      }
    }
    onMounted(() => {
      // 分页
      pageSplit();
    });
    watch(
      () => {
        props.emojiData;
      },
      () => {
        console.log(props.searchTitle, "emoji组件渲染图片");
        pageSplit();
      },
      {
        immediate: false,
        deep: true,
      }
    );
    //点击分页跳转
    watch(
      () => {
        pageData;
      },
      () => {
        pageSplit();
        const page = (pageData.crurentPage = 1);
        const pageSize = (pageData.total = props.emojiTotal);
        gotoCurrentPage(page, pageSize);
      },
      {
        immediate: true,
        deep: true,
      }
    );
    function gotoCurrentPage(page, pageSize) {
      console.log("翻页", page);
      let length = pageSize;
      showEmoji.showImg = [];
      for (
        let imgLoc = pageData.splitNum * (page - 1);
        imgLoc < pageData.splitNum * page && imgLoc < length;
        ++imgLoc
      ) {
        //
        showEmoji.showImg.push(props.emojiData[imgLoc]);
      }
    }
    return {
      ...props,
      cardTitle,
      showEmoji,
      pageData,
      gotoCurrentPage,
    };
  },
};
</script>
<style scoped>
.emoji {
  position: relative;
  display: block;
  left: 50%;
  transform: translateX(-50%);
  width: 80%;
  overflow: auto;
  box-sizing: border-box;
  box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.18);
}
.emoji-img {
  position: relative;
  width: 100%;
}
.emoji-page {
  margin-top: 5px;
  text-align: right;
}
.grid-img-class {
  width: 20%;
  height: 200px;
  text-align: center;
  overflow: auto;
  align-content: center;
  justify-items: center;
}
.grid-img-class::-webkit-scrollbar-track {
  border-radius: 2px;
  background: #b46868;
}
/* 滚动条的滑轨背景颜色 */
.grid-img-class::-webkit-scrollbar-thumb {
  height: 5px;
  border-radius: 2px;
  background: rgba(17, 227, 255, 0.2);
}
/* 滑块颜色 */
.grid-img-class::-webkit-scrollbar-button {
  border-radius: 2px;
  background: #ffa581;
}
/* 滑轨两头的监听按钮颜色 */
.grid-img-class::-webkit-scrollbar-corner {
  border-radius: 2px;
  background: rgb(81, 255, 226);
}
/* 横向滚动条和纵向滚动条相交处尖角的颜色 */
.card-img-image {
  position: relative;
  height: 110px;
}
@media only screen and (max-width: 600px) {
  .grid-img-class {
    width: 100%;
  }
  .emoji {
    overflow: auto;
  }
  .card-img-image {
    height: auto;
  }
}
</style>

结束

感谢阅读!

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!

目录
相关文章
|
5月前
|
资源调度 JavaScript 前端开发
IM跨平台技术学习(十一):环信基于Electron打包Web IM桌面端的技术实践
这次借着论证 Web IM端 SDK 是否可以在 Electron 生成的桌面端正常稳定使用,我决定把官方新推出的 webim-vue3-demo,打包到桌面端,并记录了这次验证的过程以及所遇到的问题和解决方法。
94 2
|
3月前
|
监控 前端开发 Serverless
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
现代化 Web 应用构建问题之观测站点的PV、UV和API异常等指标如何解决
49 2
|
3月前
|
数据可视化 NoSQL Serverless
现代化 Web 应用构建问题之Serverless架构的Web站点费用计算如何解决
现代化 Web 应用构建问题之Serverless架构的Web站点费用计算如何解决
43 1
|
6月前
|
安全 网络安全 开发者
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
302 0
|
5月前
|
Java
Java Socket编程 - 获取WEB站点主页信息
Java Socket编程 - 获取WEB站点主页信息
29 0
|
6月前
|
前端开发 数据管理 Ruby
blog-engine-10-middleman 静态站点生成器,利用了现代 Web 开发中的所有快捷方式和工具
这篇内容介绍了Middleman,一个基于Ruby的静态网站生成器。Middleman的特点包括静态网站生成、模板系统、前端技术支持、数据管理和简单的部署。安装步骤涉及安装Ruby和运行`gem install middleman`。使用方法包括在`source`目录编写内容,使用`middleman server`预览,`middleman build`构建网站,然后部署到服务器。Middleman的优势在于速度、灵活性和数据管理,但需要Ruby知识,且社区规模较小。适合熟悉Ruby并寻求强大建站工具的用户。
|
6月前
|
安全 网络安全 开发者
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
416 0
|
6月前
|
安全 Linux 网络安全
百度搜索:蓝易云【公网访问的Linux CentOS本地Web站点搭建指南】
请注意,将Web站点放在公网上可能涉及安全风险,建议您确保Web应用程序的安全性,并根据需要进行必要的防护措施,如防火墙设置、使用HTTPS等,以保障您的服务器和数据的安全。
151 0
|
6月前
|
自然语言处理 算法 数据库
【JavaScript+自然语言处理+HTML+CSS】实现Web端的智能聊天问答客服实战(附源码 超详细必看)
【JavaScript+自然语言处理+HTML+CSS】实现Web端的智能聊天问答客服实战(附源码 超详细必看)
122 0
|
6月前
|
人工智能 安全 网络安全
轻松搭建个人web站点:OpenWRT教程结合内网穿透技术实现公网远程访问
轻松搭建个人web站点:OpenWRT教程结合内网穿透技术实现公网远程访问