05.移动图片

B站banner图片随鼠标移动虚化效果摸索 最近,B 站首页 banner 图片会跟随着鼠标的移动而进行变化,类似于相机镜头聚焦的场景虚化效果,很多玩 B 站的小伙伴应该都留意到了吧。猪猪也想实现 banner 背景随鼠标移动而虚化的效果呢。作为一名过气爬虫程序媛,网页分析能力还是有一丢丢的。 扒 B 站源码 在 Google Chrome 打开 Bilibili 站首页,右键点击检查或按 F12 打开开发者工具,定位 B 站 banner 的网页源码位置。获取 banner 网页源代码如下。 <div class="bili-banner. 阅读详情

一.移动:

二.KeyListener键盘监听改写初步:

1.代码:

package com.itheima.ui;
​
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
​
public class GameJFrame extends JFrame implements KeyListener {
    /* 注意一定要继承JFrame类
      因为此时要创建一个窗体,而JFrame就是一个界面,窗体,
      继承JFrame的子类也表示界面,窗体
    */
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
​
​
    //创建一个二维数组
    //目的:用来管理数据
    //加载图片的时候,会根据二维数组中的数据进行加载
    int[][] data=new int[4][4];
​
    //记录空白方块在二维数组中的位置-->一开始设为0
    int x=0;
    int y=0;
​
​
    public GameJFrame(){
        //初始化界面
        initJFrame();
​
        //初始化菜单
        initJMenuBar();
​
        //初始化数据(打乱)
        initData();
​
​
        //初始化图片(根据打乱之后的结果去加载图片)
        initImage();
​
​
​
        //参数为true显示界面,为false隐藏界面-->建议写最后
        this.setVisible(true);//gameJframe.show();也可以显示界面
    }
​
​
    //初始化数据(打乱)的方法
    private void initData() {
        //1.定义一个一维数组
        int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        //2.打乱数组中数据的顺序
        Random r=new Random();
        for (int i = 0; i < tempArr.length; i++) {
            //a.随机生成一个索引
            int index=r.nextInt(tempArr.length-1);
            //b.与i索引上的元素交换位置
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }
        //3.给二维数组添加数据
        /*遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到二维数组当中 */
        for (int i = 0; i < tempArr.length; i++) {
            if(tempArr[i]==0){
                //为0时对坐标进行改变
                x=i/4;
                y=i%4;
            } else {
                //不为0时添加到二维数组中
                data[i/4][i%4]=tempArr[i];
            }
​
        }
    }
​
​
    //初始化图片的方法
     //初始化数据(打乱)后,在添加图片时,就需要根据二维数组中管理的数据进行添加图片
    private void initImage() {
​
        /* 路径分为两种:
            1.绝对路径:一定是从盘符开始的,如D:\Java
            2.相对路径:相对路径是相对当前项目而言的,不是从盘符开始的.
                如aaa\\bbb,就是在当前项目下去找aaa文件夹,里面再找bbb文件夹
         */
​
​
        /* 细节:
            先加载的图片在上方,后加载的图片在下方。
            本例中背景图片在下方,应该之后加载
         */
​
        //外循环控制x,内循环控制y----嵌套循环(先看内循环,再看外循环)
        //外循环 --- 把内循环重复执行了四次
        for (int i = 0; i < 4; i++) {
            //内循环 --- 表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载的图片的序号
                int number=data[i][j];
                //创建一个图片ImageIcon的对象,注:number是整型,要单独写出来
                ImageIcon icon=new ImageIcon("..\\PuzzleGame\\image\\animal\\animal3\\"+number+".jpg");/*这是相对路径,PuzzleGame前有个..\\(..//也行)  */
                //创建一个JLabel的对象(管理容器),本例中没有第16张图片,但也会执行new JLabel,只不过加载了个空白
                JLabel jLabel=new JLabel(icon);//放入icon,代表管理icon
                //指定图片位置(必须是在"把管理容器添加到界面中"前)
                /* 83和134是为了把内容移动到中央偏下(这个数值需要自己测试) */
                jLabel.setBounds(105*j+83,105*i+134,105,105);//第一个参数为横坐标,第二个参数为纵坐标,第三个参数为宽(像素),第四个参数为高(像素)
                //给图片添加边框(new BevelBorder(0)代表让图片凸起来,0是RAISED;new BevelBorder(1)代表让图片凹下去,1是LOWERED)
                jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));//也可以是jLabel.setBorder(new BevelBorder(1));
                //把管理容器添加到界面中
                this.getContentPane().add(jLabel);//getContentPane()用来获取里面隐藏的容器
            }
        }
​
​
        //添加背景图片
        ImageIcon bg=new ImageIcon("..\\PuzzleGame\\image\\background.png");/*这是相对路径,PuzzleGame前有个..\\  */
        //创建一个JLabel的对象(管理容器)
        JLabel background=new JLabel(bg);
        //设置JLabel的对象(管理容器)的位置和宽高-->数值需要自己一点一点测试
        background.setBounds(40,40,508,560);
        //把背景图片(管理容器)添加到界面中
        this.getContentPane().add(background);//getContentPane()用来获取里面隐藏的容器
​
    }
​
​
​
​
​
    //初始化菜单的方法
    private void initJMenuBar() {
        //初始化菜单
        //1.创建整个的菜单对象
        JMenuBar jMenuBar=new JMenuBar();
        //2.创建菜单上面的两个选项的对象(功能  关于我们)
        JMenu functionJMenu=new JMenu("功能");
        JMenu aboutJMenu=new JMenu("关于我们");
        //3.创建选项下面的条目对象
        //功能
        JMenuItem replayItem=new JMenuItem("重新游戏");
        JMenuItem reLoginItem=new JMenuItem("重新登录");
        JMenuItem closeItem=new JMenuItem("关闭游戏");
        //关于我们
        JMenuItem accountItem=new JMenuItem("公众号");
​
​
        //将每一个选项下面的条目添加到选项当中
        //功能
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);
        //关于我们
        aboutJMenu.add(accountItem);
​
​
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);
​
​
        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }
​
​
​
    //初始化界面的方法
    private void initJFrame() {
        //设置界面的宽高(单位:像素)-->大小根据内容定
        this.setSize(603,680);//第一个参数为宽,第二个参数为高
        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式-->不设置的话最终运行后再关闭界面,但程序不停止
        //this.setDefaultCloseOperation(3);//3代表一种关闭规则,可通过看源码了解
        //还可以this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //对于关闭模式,必须每个界面都设置一遍才生效。关闭模式2是关了最后一个才结束,关闭模式3是关一个就结束一个
        //本项目这几个界面不会同时出现,因此用关闭模式3即可
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);
        //给整个界面添加键盘监听事件
        this.addKeyListener(this);
    }
​
    @Override
    public void keyTyped(KeyEvent e) {
​
    }
​
    @Override
    public void keyPressed(KeyEvent e) {
​
    }
​
    @Override
    public void keyReleased(KeyEvent e) {
        //对上,下,左,右进行判断(各对应一个编号-->不需要记,用的时候打印一下即可知道编号是几)
        //左:37;上:38;右:39;下:40
        int code=e.getKeyCode();
        if(code==37){
            System.out.println("向左移动");
        } else if (code==38) {
            System.out.println("向上移动");
        } else if (code==39) {
            System.out.println("向右移动");
        } else if (code==40) {
            System.out.println("向下移动");
        }
    }
}

​

2.测试类:

import com.itheima.ui.GameJFrame;
import com.itheima.ui.LoginJFrame;
import com.itheima.ui.RegisterJFrame;
​
public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
​
        //如果我们想要开启一个界面,就创建谁的对象就可以了
        //new LoginJFrame();//调用了登录界面的空参构造
​
        //new RegisterJFrame();
​
        new GameJFrame();
    }
}
​

​

3.运行结果:

按键盘右下角的向上按钮后:


三.KeyListener键盘监听最终改写(注意越界的bug):

1.代码:

package com.itheima.ui;
​
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
​
public class GameJFrame extends JFrame implements KeyListener {
    /* 注意一定要继承JFrame类
      因为此时要创建一个窗体,而JFrame就是一个界面,窗体,
      继承JFrame的子类也表示界面,窗体
    */
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
​
​
    //创建一个二维数组
    //目的:用来管理数据
    //加载图片的时候,会根据二维数组中的数据进行加载
    int[][] data=new int[4][4];
​
    //记录空白方块在二维数组中的位置-->一开始设为0
    int x=0;
    int y=0;
​
​
    public GameJFrame(){
        //初始化界面
        initJFrame();
​
        //初始化菜单
        initJMenuBar();
​
        //初始化数据(打乱)
        initData();
​
​
        //初始化图片(根据打乱之后的结果去加载图片)
        initImage();
​
​
​
        //参数为true显示界面,为false隐藏界面-->建议写最后
        this.setVisible(true);//gameJframe.show();也可以显示界面
    }
​
​
    //初始化数据(打乱)的方法
    private void initData() {
        //1.定义一个一维数组
        int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        //2.打乱数组中数据的顺序
        Random r=new Random();
        for (int i = 0; i < tempArr.length; i++) {
            //a.随机生成一个索引
            int index=r.nextInt(tempArr.length-1);
            //b.与i索引上的元素交换位置
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }
        //3.给二维数组添加数据
        /*遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到二维数组当中 */
        for (int i = 0; i < tempArr.length; i++) {
            if(tempArr[i]==0){
                //为0时对坐标进行改变
                x=i/4;
                y=i%4;
            } else {
                //不为0时添加到二维数组中
                data[i/4][i%4]=tempArr[i];
            }
​
        }
    }
​
​
    //初始化图片的方法
     //初始化数据(打乱)后,在添加图片时,就需要根据二维数组中管理的数据进行添加图片
    private void initImage() {
        //需要先清空原本已经出现的所有图片
        this.getContentPane().removeAll();//之后重新加载
​
​
​
        /* 路径分为两种:
            1.绝对路径:一定是从盘符开始的,如D:\Java
            2.相对路径:相对路径是相对当前项目而言的,不是从盘符开始的.
                如aaa\\bbb,就是在当前项目下去找aaa文件夹,里面再找bbb文件夹
         */
​
​
        /* 细节:
            先加载的图片在上方,后加载的图片在下方。
            本例中背景图片在下方,应该之后加载
         */
​
        //外循环控制x,内循环控制y----嵌套循环(先看内循环,再看外循环)
        //外循环 --- 把内循环重复执行了四次
        for (int i = 0; i < 4; i++) {
            //内循环 --- 表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载的图片的序号
                int number=data[i][j];
                //创建一个图片ImageIcon的对象,注:number是整型,要单独写出来
                ImageIcon icon=new ImageIcon("..\\PuzzleGame\\image\\animal\\animal3\\"+number+".jpg");/*这是相对路径,PuzzleGame前有个..\\(..//也行)  */
                //创建一个JLabel的对象(管理容器),本例中没有第16张图片,但也会执行new JLabel,只不过加载了个空白
                JLabel jLabel=new JLabel(icon);//放入icon,代表管理icon
                //指定图片位置(必须是在"把管理容器添加到界面中"前)
                /* 83和134是为了把内容移动到中央偏下(这个数值需要自己测试) */
                jLabel.setBounds(105*j+83,105*i+134,105,105);//第一个参数为横坐标,第二个参数为纵坐标,第三个参数为宽(像素),第四个参数为高(像素)
                //给图片添加边框(new BevelBorder(0)代表让图片凸起来,0是RAISED;new BevelBorder(1)代表让图片凹下去,1是LOWERED)
                jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));//也可以是jLabel.setBorder(new BevelBorder(1));
                //把管理容器添加到界面中
                this.getContentPane().add(jLabel);//getContentPane()用来获取里面隐藏的容器
            }
        }
​
​
        //添加背景图片
        ImageIcon bg=new ImageIcon("..\\PuzzleGame\\image\\background.png");/*这是相对路径,PuzzleGame前有个..\\  */
        //创建一个JLabel的对象(管理容器)
        JLabel background=new JLabel(bg);
        //设置JLabel的对象(管理容器)的位置和宽高-->数值需要自己一点一点测试
        background.setBounds(40,40,508,560);
        //把背景图片(管理容器)添加到界面中
        this.getContentPane().add(background);//getContentPane()用来获取里面隐藏的容器
​
​
​
        //刷新一下界面
        this.getContentPane().repaint();
​
    }
​
​
​
​
​
    //初始化菜单的方法
    private void initJMenuBar() {
        //初始化菜单
        //1.创建整个的菜单对象
        JMenuBar jMenuBar=new JMenuBar();
        //2.创建菜单上面的两个选项的对象(功能  关于我们)
        JMenu functionJMenu=new JMenu("功能");
        JMenu aboutJMenu=new JMenu("关于我们");
        //3.创建选项下面的条目对象
        //功能
        JMenuItem replayItem=new JMenuItem("重新游戏");
        JMenuItem reLoginItem=new JMenuItem("重新登录");
        JMenuItem closeItem=new JMenuItem("关闭游戏");
        //关于我们
        JMenuItem accountItem=new JMenuItem("公众号");
​
​
        //将每一个选项下面的条目添加到选项当中
        //功能
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);
        //关于我们
        aboutJMenu.add(accountItem);
​
​
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);
​
​
        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }
​
​
​
    //初始化界面的方法
    private void initJFrame() {
        //设置界面的宽高(单位:像素)-->大小根据内容定
        this.setSize(603,680);//第一个参数为宽,第二个参数为高
        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式-->不设置的话最终运行后再关闭界面,但程序不停止
        //this.setDefaultCloseOperation(3);//3代表一种关闭规则,可通过看源码了解
        //还可以this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //对于关闭模式,必须每个界面都设置一遍才生效。关闭模式2是关了最后一个才结束,关闭模式3是关一个就结束一个
        //本项目这几个界面不会同时出现,因此用关闭模式3即可
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);
        //给整个界面添加键盘监听事件
        this.addKeyListener(this);
    }
​
    @Override
    public void keyTyped(KeyEvent e) {
​
    }
​
    @Override
    public void keyPressed(KeyEvent e) {
​
    }
​
    @Override
    public void keyReleased(KeyEvent e) {
        //对上,下,左,右进行判断(各对应一个编号-->不需要记,用的时候打印一下即可知道编号是几)
        //左:37;上:38;右:39;下:40
        int code=e.getKeyCode();
        if(code==37){
            System.out.println("向左移动");
            /* 逻辑:
                把空白方块右方的数字往左移动
             */
            if(y==3){
                //表示空白方块已经在最右方了,他的右方没有图片再能向左移动了-->直接结束方法即可
                return;
            }
​
            //把空白方块右方的数字赋值给空白方块
            data[x][y]=data[x][y+1]; //x,y表示空白方块
            data[x][y+1]=0;//0代表第0张图片即空白图片
            y++;//空白方块此时向右移动了,y也就自增
            //调用方法按照最新的数字加载图片
            initImage();
​
        } else if (code==38) {
            System.out.println("向上移动");
            /* 逻辑:
                把空白方块下方的数字往上移动
                x,y表示空白方块
                x+1,y表示空白方块下方的数字
             */
            /* 特例:如果空白块在最下方如一开始x=3,y=0
                  此时x+1就越界了
                因此要做越界判断
             */
            if(x==3){
                //表示空白方块已经在最下方了,他的下方没有图片再能向上移动了-->直接结束方法即可
                return;
            }
​
            //把空白方块下方的数字赋值给空白方块
            data[x][y]=data[x+1][y];
            data[x+1][y]=0;//0代表第0张图片即空白图片
            x++;//空白方块此时向下移动了,x也就自增
            //调用方法按照最新的数字加载图片
            initImage();
​
        } else if (code==39) {
            System.out.println("向右移动");
            /* 逻辑:
                把空白方块左方的数字往右移动
             */
            if(y==0){
                //表示空白方块已经在最左方了,他的左方没有图片再能向右移动了-->直接结束方法即可
                return;
            }
​
            //把空白方块左方的数字赋值给空白方块
            data[x][y]=data[x][y-1]; //x,y表示空白方块
            data[x][y-1]=0;//0代表第0张图片即空白图片
            y--;//空白方块此时向左移动了,y也就自减
            //调用方法按照最新的数字加载图片
            initImage();
​
        } else if (code==40) {
            System.out.println("向下移动");
            /* 逻辑:
                把空白方块上方的数字往下移动
             */
            if(x==0){
                //表示空白方块已经在最上方了,他的上方没有图片再能向下移动了-->直接结束方法即可
                return;
            }
​
            //把空白方块上方的数字赋值给空白方块
            data[x][y]=data[x-1][y];
            data[x-1][y]=0;//0代表第0张图片即空白图片
            x--;//空白方块此时向上移动了,x也就自减
            //调用方法按照最新的数字加载图片
            initImage();
        }
    }
}

​
图例:

2.测试类:

import com.itheima.ui.GameJFrame;
import com.itheima.ui.LoginJFrame;
import com.itheima.ui.RegisterJFrame;
​
public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
​
        //如果我们想要开启一个界面,就创建谁的对象就可以了
        //new LoginJFrame();//调用了登录界面的空参构造
​
        //new RegisterJFrame();
​
        new GameJFrame();
    }
}

​
​

3.运行结果:


四.总结:


图片跟随鼠标移动并放大js特效 js实现图片放大,并跟随鼠标移动 很多网站有类似于淘宝放大镜的效果,只不过这里说的是 “ 不仅能直接放大,而且会跟随鼠标移动 ” ! 类似于“ DEDECMS ”官网的案例中心的效果 ! 本案例代码,参考如下: JS代码: &amp;amp;amp;lt;script&amp;amp;amp;gt; //展示 function showBigPic(filepath) { //将文件路... 阅读详情

相关推荐

DGX Spark上PyTorch GPU环境配置实战:CUDA 13.0与ARM架构全流程

在深度学习中,CUDA作为GPU加速计算的底层基础,其版本与深度学习框架(如PyTorch)的匹配直接影响模型训练的效率与稳定性。GPU环境配置不仅涉及驱动、CUDA工具链与框架运行时的协同,还依赖于硬件架构与预构建包的兼容性。在AI开发机Ubuntu系统上,正确对齐CUDA版本、计算能力架构及安装源,是避免环境故障、发挥硬件算力的关键。无论是面向个人AI超算还是通用GPU服务器,掌握版本对齐、路径隔离与验证方法,都能大幅提升开发效率。本文以DGX Spark为例,详解从环境摸底到PyTorch GPU版本

weixin_29483277的博客 218

05-vue移动端项目(主页index文章列表数据的渲染,插件弄图片懒加载,dayjs的相对时间(比momentjs体积小用法一样)的使用,全局过滤器,解决js处理数字最大范围json-bigint)

主页数据 01 - 完成数据的结构 & 样式 文章数组的组成: 文章的标题 文章的图片 可以使用 vant 中的组件: 文章的作者 & 评论数 & 发布日期 更多操作按钮 02 - 动态渲染数据 打印当前频道的文章列表可以看到以下数据,然后再渲染到页面上 了解文章数据源中的数据: art_id:文章的 id aut_id:作者的 id aut_name :作者的名称 ch_id:所属频道的 id collect_count:收藏数 comm_count:

Tangoneone的博客 568

2024最新超详细无痛安装PyTorch,包括下载地址、环境配置与各种避坑指南

PyTorch更新很快,2024最新下载安装经验贴,包括anaconda+CUDA+cuDNN+PyTorch四部分的下载和安装。文章详细介绍了下载地址、环境配置、虚拟环境建立的问题,还温馨提示了各种闭坑指南。有需要的友友快过来康康!

qq_43596278的博客 11万+

生产实习日志(16)

学习日志       姓名:姚强   日期:2018.07.05今日学习任务:1.学习用ARM板LCD屏显示图片和汉字。                        2.完成项目设计:计步器今日任务完成情况:1.加入自己的元素。                                2.基本完成项目设计的功能。代码量:300行。今日开发中出现的问题汇总:1.对于按键的初始化和按键的调用无...

qq_42492510的博客 401

区块链入门:用账本、乐高和三台旧电脑讲懂分布式账本

区块链是一种去中心化的分布式账本技术,其核心原理是通过密码学哈希、共识机制和链式结构实现数据不可篡改与多方共同验证。它不依赖单一中心,而是将交易记录同步复制到多个节点,依靠数学规则而非人工信任达成一致,从而在数字世界构建可验证的信用基础设施。这种‘集体见证’模式显著提升了系统抗单点故障与人为干预的能力,广泛应用于供应链溯源、数字身份、教育管理及公益透明等需强信任保障的场景。本文以账本类比、乐高拆解和Ganache实操为线索,面向零基础读者通俗解析哈希值、挖矿与智能合约等关键概念。

weixin_30517215的博客 274

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

vue2移动端网页图片触摸滑动以及双指对图片进行缩放

vue2移动端网页图片触摸滑动以及双指对图片进行缩放

0303 965

Android/AutoMotive 多用户文件操作与权限管理

本文深入探讨了Android/Automotive多用户系统的文件操作与权限管理机制。文章阐述了多用户隔离与共享的核心原理,重点介绍了如何使用adb指令精准管理不同用户的应用与数据,并提供了在Android Automotive车载场景下实现安全跨用户数据共享与权限控制的最佳实践。

weixin_29214691的博客 162

html语言移动图片,HTML文字和图片的移动

移动的一些属性及参数:MARQUEE(令文字、图片移动)align=center>表示居中移动方向 :direction=“一个参数”, 参数有:left(左)、right(右)、up(上)、down(下)速度:scrollamount=5字体:font宽度:width高度:height图片起始符:imgsrc=loop=3 走三次背景色:bgcolor (bgcolor=pink)pink...

weixin_34345695的博客 2726

手把手教你用Three.js+Vue打造3D机房可视化系统(附完整代码)

本文详细介绍了如何使用Three.js与Vue 3构建企业级3D机房可视化系统。从技术选型、项目架构设计到3D场景构建、设备建模与渲染策略,提供了完整的开发方案和实战代码。重点讲解了如何实现设备状态实时监控、交互操作与性能优化,帮助开发者快速掌握3D可视化开发的核心技术。

ttt77的博客 315

解锁RK1126与SC132GS摄像头适配密码:技术与代码全解析

本文详细介绍了瑞芯微RK1126芯片与SC132GS摄像头的适配方法。首先分析了RK1126的四核Cortex-A7处理器、Mali-T860 GPU等硬件特性,以及SC132GS的130万像素、全局快门等技术参数。重点阐述了基于MIPI CSI接口的硬件连接原理和基于V4L2框架的软件驱动设计,并提供了完整的初始化、数据采集和图像处理代码实现。针对常见连接和图像质量问题给出了解决方案,展现了该组合在智能安防、工业检测等领域的应用潜力,为开发者提供了实用的技术参考。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1501

解决移动端canvas 绘制的图片模糊的问题

之前前面写过一遍有关canvas移动端适配的稿文,测试测出来还有点bug,绘制的图有点模糊,这里完善下。假如,页面是1200*680 的高度,我的图片得是2倍的图2400*1360。canvas 设置成2400*1360的width ,这样页面会被放大,canvas的width、height得是实际可视内容的宽度,得动态获取。当然在实际h5页面里,宽高不会是这样写死的,都是动态获取。解决办法是,所有的数值,必须要 乘以 dpr,记得,如果有点位的展示,点位也需要 乘以dpr。例如,我这个设计是横屏,

xiaofang_z的博客 1838

视觉提示学习(Prompt Learning):CV领域的GPT时刻?

视觉提示学习(Prompt Learning):CV领域的GPT时刻? ,人工智能,计算机视觉,大模型,AI,在人工智能技术不断演进的今天,计算机视觉(Computer Vision,CV)作为人工智能领域的重要分支,始终致力于让机器 “看懂” 世界。从早期基于传统特征工程的图像识别方法,到深度学习时代卷积神经网络(Convolutional Neural Networks,CNN)的崛起,CV 领域经历了多次重大变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

写一个图片裁剪的js,JavaScript图片裁剪插件PlusCropper

PlusCropper是一个轻量级的JavaScript插件,它允许用户在网页上交互式地裁剪图片。用户可以通过鼠标或触摸操作来调整裁剪区域的大小和位置。支持图片的顺时针和逆时针旋转。支持图片的放大和缩小,方便用户精确定位裁剪区域。支持触摸事件,可在移动设备上流畅运行。提供onShowonHide和onCrop回调函数,方便用户在裁剪框显示、隐藏和裁剪完成后执行自定义操作。PlusCropper是一个功能完善且易于使用的JavaScript图片裁剪插件。

服务员的博客 3599

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

移动端图片九宫格布局

通过css伪类选择器来实现图片数量不同时选择不同的排班方案。

makabakassr的博客 292

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

基于Vue + fabric.js的移动端图片标注

在一张图片上识别出特定的物品或者人并且标注出来,识别的坐标是由服务端接口返回的,主要的难点就是在前端图片上绘制出相应的标注框,并且在底部展示一个列表,可以在图片框选或者底部轮播点击实现勾选/取消勾选的切换,之后进入下一个页面进行详情的展示。由于图片是由用户拍照或者选择本地图片上传,就存在一个问题,长宽比不一致,且不同的手机分辨率不同,就不能简单的按照宽或者高来显示,需要比对图片的分辨率及canvas实际展示区域的分辨率,尽量的保持原图的比例并且在手机端能完整展示。2、在图片上画出标识框。

qq_29712053的博客 1333

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

uniapp点击预览图片,两种效果

uniapp图片预览。单张,点击放大;多张,可点击放大,可左右滑动。

在职可交流前端开发,包括:web端、uniapp等,欢迎指教。 9105

jquery方法animate操作图片移动

在很多商城上看到有加入购物车然后图片飞入购物车的效果,于是尝试做了一下 原理:把图片生成一张小的图片半透明,然后给小图片新的坐标,当小图片到新的坐标就消失,效果如下: $(function () { //给所有图片注册点击事件 $("img").click(function (

侞婼冇罪 3025

CSS实现鼠标移动到图片上图片变大

html部分 专利战升级,高通要求美禁止进口部分iPhone机型 css部分 .ho-tran em{ height:8rem; overflow:hidden; } .ho-tran img{ width: 100%; height: 100%; cursor: pointer; transition: all 0.6s;

GLyihu的博客 1444

YOLO X Layout快速上手教程:5分钟完成本地部署并分析第一张文档截图

本文介绍了如何在星图GPU平台自动化部署yolo_x_layout文档理解模型,实现高效文档智能分析。该模型能准确识别文档中的文本、表格、图片等11种元素类型,可广泛应用于企业文档数字化、学术论文结构分析等场景,提升文档处理效率。

weixin_36064575的博客 279

移动web必会技能-图片居中处理

我们在日常使用移动APP的时候,特别是一些资讯类的APP,都会有图片展示的相关UI,例如今日头条APP的单大图和三图模式,如下图: 单图: 三图: 或者是类似微博或者朋友圈这种9宫格的图片展示效果,如下图: 对于这些图片,如果你单纯的以为直接用几个,配置一下src地址,然后渲染在页面上,那就大错特错了

weixin_44792419的博客 1406

嵌入式 SDL进行图片的切割与移动

测试Demo,但不要以为就可以随意为之,良好的代码风格和设计思想在哪都是需要注意的 下面来看看博主的工程结构: SDL进行图片的切割与移动" /> 工程下多了一个sheet.jpg,这就是今天要用于切割的图片 SDL进行图片的切割与移动" /> 图片是400 * 400 pixel(像素) 接下来我们要做的工作就是,把这张图切割成4个圆,并且把背景变成透明 说明:博主在SDL_fun.h这个

skdkjxy的专栏 1478

基于移动端端vant使用ImagePreview 图片预览的使用的一些问题

基于移动端端vant使用ImagePreview 图片预览的使用的一些问题 关于使用vant中的ImagePreview 图片预览的使用: 使用指南 和其他组件不同,不是通过HTML结构的方式来使用,而是通过函数调用的方式。使用前需要先引入它。 import { Lazyload } from 'vant'; 基本用法 直接传入图片数组,即可展示图片预览 ImagePreview([ 'https://img.yzcdn.cn/1.jpg', 'https://img.yzcdn.cn/2.jp

weixin_43294092的博客 2790

Android实现图片随着手指触摸屏幕移动

一、步骤 自定义view,并且重写里面的ondraw函数 在mainActivity中进行调用 二、主要知识 了解paint(画笔),color(颜色),canvas (画板)这里有用到canvas.drawBitmap(Bitmap bitmap,Float left,Float top,Paint paint)方法绘制图片。大家可以通过这篇文章去了解一下相关知识paint等相关知识 三、代码 我选择了一张星星的图片放在了mipmap文件夹中然后把背景颜色设置为了黑色 一个帧布局xml文件在lay

fairy0000000的博客 2367

基于jq的pc或移动端的图片预览,放大、缩小,拖动,旋转等,基于viewerjs

js版  —  viewer.js github  github地址 jq版 —   jquery-viewer  github地址 一款基于jq的pc、移动端的图片预览,缩放插件, 1、html &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8" /&gt; ...

csl125的博客 5298

移动端图片轮播?

移动端图片轮播? 在移动端的时候,经常会遇到好多图片,可以用手滑动来实现轮播?好吧,我也不知道是不是应该叫轮播,但是类似的就是那种效果。 把 //html &lt;div class="product-exihibate"&gt; &lt;ul&gt; &lt;li class="item" v-on:click="productDetail(desc.desc_id)"...

可以叫我啪叽的石头 403
上一篇: 04.美化界面
下一篇: 06.查看完整图片,作弊码和判断胜利
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值