精华内容
下载资源
问答
  • h5页面利用js添加水印

    万次阅读 热门讨论 2018-09-18 17:28:33
    最近遇到一个需求,给所有页面加水印(登录人+登录时间),不影响其他点击等功能的使用,目的是防止信息外漏,当时就想:这年头,PS就不说人人都能使用,谁手机还没个涂鸦功能,防不了,但是就是这么个需求,那就...

    最近遇到一个需求,给所有页面加水印(登录人+登录时间),不影响其他点击等功能的使用,目的是防止信息外漏,当时就在想:这年头,PS就不说人人都能使用,谁手机还没个涂鸦功能,防不了,但是就是这么个需求,那就实现吧,不逼逼了,直接上:

    具体实现思路:在页面底部加一个大的div,给这个div添加背景图,背景图?从哪来?canvas实现吧!

    思路有了,直接上代码:

    (function waterMark(){
    	function textBecomeImg(text,fontsize,fontcolor){
    		var canvas = document.createElement('canvas');
    		$buHeight = 0;
    		if(fontsize <= 32){ $buHeight = 99; }
    		else if(fontsize > 32 && fontsize <= 60 ){ $buHeight = 2;}
    		else if(fontsize > 60 && fontsize <= 80 ){ $buHeight = 4;}
    		else if(fontsize > 80 && fontsize <= 100 ){ $buHeight = 6;}
    		else if(fontsize > 100 ){ $buHeight = 10;}
    		canvas.height=fontsize + $buHeight ;
    		canvas.padding=30;
    		var context = canvas.getContext('2d');
    		context.clearRect(0, 0, canvas.width*2, canvas.height);
    		context.textAlign = "center";
                    canvas.width = 450;
                    canvas.height = 200;
                    context.fillStyle = fontcolor;
                    context.font=fontsize+"px Arial";
                    context.textBaseline = 'middle'; 
                    context.fillText(text,0,fontsize/2);
                    var canvasWidth = canvas.width/99;
                    canvasWidth = context.measureText(text).width;
    		var dataUrl = canvas.toDataURL('image/png');
    		return dataUrl;
    	}
    	var text = DateUtil.getDate(new Date())+currentUserName;
    	var shuiyinDiv = document.createElement('div');
    	var style = shuiyinDiv.style;
    	style.position = 'absolute';
    	style.left = 0;
    	style.top = '-60%';
    	style.width = '120%';
    	style.height = '200%';
    	style.opacity = '0.1';
    	style.background = "url("+textBecomeImg(text,22,"gray")+")";
    	style.zIndex = 9999999991;
    	style.transform = "rotate(-30deg)";
    	style.pointerEvents = "none";
    	document.body.appendChild(shuiyinDiv);
    })();

    效果图:

    展开全文
  • java实现爬虫爬取京东手机页面

    万次阅读 2019-05-06 16:10:47
    java实现爬虫利用httpclient获取页面数据,再用jsoup解析获取数据,页面的分析不作过多赘述,读者自行分析. 1.首页输入手机,观察url参数,将其中"&page="提取到最后,便于拼接页码参数; 2.查看网页源代码,观看...

    java实现爬虫利用httpclient获取页面数据,再用jsoup解析获取数据,在此页面的分析不作过多赘述,读者自行分析.

    1.首页输入手机,观察url参数,将其中"&page="提取到最后,便于拼接页码参数;

    2.查看网页源代码,观看到商品列表标签,所以第一步,获取商品列表,Elements spuEles = doc.select( "div#J_goodsList>ul>li" );第二步,获取spu,long spu = Long.parseLong( spuEle.attr( "data-spu" ) );第三步,获取sku列表,Elements skuEles = spuEle.select( "li.ps-item" );第四步,获取单个sku,long sku = Long.parseLong( skuEle.select( "[data-sku]" ).attr( "data-sku" ) );之后的操作就都是通过这个sku来操作的;

    3.代码:

    (1)添加依赖

    <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
    		<dependency>
    		    <groupId>org.apache.httpcomponents</groupId>
    		    <artifactId>httpclient</artifactId>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    		<dependency>
    		    <groupId>org.jsoup</groupId>
    		    <artifactId>jsoup</artifactId>
    		    <version>1.11.3</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    		<dependency>
    		    <groupId>org.apache.commons</groupId>
    		    <artifactId>commons-lang3</artifactId>
    		    <version>3.4</version>
    		</dependency>
    <!-- jpa -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-data-jpa</artifactId>
    		</dependency>

    数据库等其他依赖就不贴了;

    (2)工具类封装

    @Component
    public class HttpUtils {
    
        private PoolingHttpClientConnectionManager cm;
    
        public HttpUtils() {
            this.cm = new PoolingHttpClientConnectionManager();
            // 设置最大连接数
            this.cm.setMaxTotal( 100 );
            // 设置每个主机的最大连接数
            this.cm.setDefaultMaxPerRoute( 10 );
        }
    
        // 根据请求地址下载页面数据
        public String doGetHtml( String url ) {
            // 获取httpclient对象
            CloseableHttpClient httpClient = HttpClients.custom()
                                                        .setConnectionManager( this.cm )
                                                        .build();
            // 设置httpGet请求对象,设置url地址
            HttpGet httpGet = new HttpGet( url );
            httpGet.addHeader( "user-agent", "Mozilla/5.0" );
            // 设置请求信息
            httpGet.setConfig( this.getConfig() );
            CloseableHttpResponse response = null;
            try {
                // 使用httpclient发起请求,回去响应
                response = httpClient.execute( httpGet );
                // 解析响应.返回结果
                if ( response.getStatusLine()
                             .getStatusCode() == 200 ) {
                    // 判断响应体Entity是否不为空,如果不为空就可以使用EntityUtils
                    if ( response.getEntity() != null ) {
                        String content = EntityUtils.toString( response.getEntity(), "utf-8" );
                        return content;
                    }
                }
            } catch( Exception e ) {
                e.printStackTrace();
            } finally {
                try {
                    // 关闭response
                    if ( response != null ) {
                        response.close();
                    }
                } catch( IOException e ) {
                    e.printStackTrace();
                }
            }
            // 返回空字符串
            return "";
        }
    
        /**
         * //下载图片名称
         * 
         * @param url
         * @return
         */
        public String doGetImage( String url ) {
            // 获取httpclient对象
            CloseableHttpClient httpClient = HttpClients.custom()
                                                        .setConnectionManager( this.cm )
                                                        .build();
            // 设置httpGet请求对象,设置url地址
            HttpGet httpGet = new HttpGet( url );
            httpGet.addHeader( "user-agent", "Mozilla/5.0" );
            // 设置请求信息
            httpGet.setConfig( this.getConfig() );
            CloseableHttpResponse response = null;
            try {
                // 使用httpclient发起请求,回去响应
                response = httpClient.execute( httpGet );
                // 解析响应.返回结果
                if ( response.getStatusLine()
                             .getStatusCode() == 200 ) {
                    // 判断响应体Entity是否不为空,如果不为空就可以使用EntityUtils
                    if ( response.getEntity() != null ) {
                        // 下载图片
                        // 获取图片的后缀
                        String extName = url.substring( url.lastIndexOf( "." ) );
                        // 创建图片名,重命名图片
                        String picName = UUID.randomUUID()
                                             .toString() +
                                         extName;
                        // 下载图片
                        // 声明OutPutStream
                        OutputStream outPutStream = new FileOutputStream( new File( "D:\\driver\\images\\" + picName ) );
                        response.getEntity()
                                .writeTo( outPutStream );
                        // 返回图片名称
                        return picName;
                    }
                }
            } catch( Exception e ) {
                e.printStackTrace();
            } finally {
                try {
                    // 关闭response
                    if ( response != null ) {
                        response.close();
                    }
                } catch( IOException e ) {
                    e.printStackTrace();
                }
            }
            // 如果下载失败,返回空字符串
            return "";
        }
    
        // 设置请求信息
        private RequestConfig getConfig() {
            RequestConfig config = RequestConfig.custom()
                                                .setConnectTimeout( 1000 ) // 创建连接的最长时间
                                                .setConnectionRequestTimeout( 500 ) // 获取连接的最长时间
                                                .setSocketTimeout( 10000 ) // 数据传输最长时间
                                                .build();
            return config;
        }
    }

    (3)dao层,service层以及实体类

    public interface ItemDao extends JpaRepository<Item, Long> {
    
    }
    
    @Service
    public class ItemService {
    
        @Autowired
        private ItemDao itemDao;
    
        @Transactional
        public void save( Item item ) {
            this.itemDao.save( item );
        }
    
        public List<Item> findAll( Item item ) {
            // 声明查询条件
            Example<Item> example = Example.of( item );
            // 根据查询条件进行查询数据
            List<Item> list = this.itemDao.findAll( example );
            return list;
        }
    }
    
    @Entity
    @Table( name = "jd_item" )
    @Data
    public class Item {
    
        @Id
        @GeneratedValue( strategy = GenerationType.IDENTITY )
        private Long   id;
    
        private Long   spu;
    
        private Long   sku;
    
        private String title;
    
        private Double price;
    
        private String pic;
    
        private String url;
    
        private Date   created;
    
        private Date   updated;
    }

    (4)定时任务

    @Component
    public class ItemTask {
    
        @Autowired
        private HttpUtils                 httpUtils;
    
        @Autowired
        private ItemService               itemService;
    
        @Autowired
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        // 当下载任务完成后,间隔多长时间进行下一次的任务
        @Scheduled( fixedDelay = 100 * 1000 )
        public void itemTask() throws Exception {
            // 声明需要解析的初始地址
            String url = "https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&suggest=1.def.0.V13--12%2C20%2C&wq=shouji&cid2=653&cid3=655&s=59&click=0&page=";
            // 遍历页面
            for( int i = 1; i < 10; i = i + 2 ) {
                String html = httpUtils.doGetHtml( url + i );
                // 解析页面,获取商品数据并存储
                this.parse( html );
            }
            System.out.println( "手机数据抓取完成!" );
        }
    
        // 解析页面,获取商品数据并存储
        private void parse( String html ) throws Exception {
            // 解析html,获取dom对象
            Document doc = Jsoup.parse( html );
            // 获取商品列表
            Elements spuEles = doc.select( "div#J_goodsList>ul>li" );
            for( Element spuEle : spuEles ) {
                // 获取spu
                long spu = Long.parseLong( spuEle.attr( "data-spu" ) );
                // 获取sku列表
                Elements skuEles = spuEle.select( "li.ps-item" );
                for( Element skuEle : skuEles ) {
                    // 获取sku
                    long sku = Long.parseLong( skuEle.select( "[data-sku]" )
                                                     .attr( "data-sku" ) );
                    // 根据sku查询商品数据
                    Item item = new Item();
                    item.setSku( sku );
                    List<Item> list = this.itemService.findAll( item );
                    if ( list.size() > 0 ) {
                        // 如果商品存在,就进行下一个循环,该商品不保存,因为已存在
                        continue;
                    }
                    // 设置商品的spu
                    item.setSpu( spu );
                    // 获取商品详情的url
                    String itemUrl = "https://item.jd.com/" + sku + ".html";
                    item.setUrl( itemUrl );
                    // 获取商品的图片
                    String picUrl = "https:" + skuEle.select( "img[data-sku]" )
                                                     .first()
                                                     .attr( "data-lazy-img" );
                    picUrl = picUrl.replace( "/n9", "/n1" );
                    String picName = this.httpUtils.doGetImage( picUrl );
                    item.setPic( picName );
                    // 获取商品的价格
                    String priceJson = this.httpUtils.doGetHtml( "https://p.3.cn/prices/mgets?skuIds=J_" + sku );
                    double price = MAPPER.readTree( priceJson )
                                         .get( 0 )
                                         .get( "p" )
                                         .asDouble();
                    item.setPrice( price );
                    // 获取商品的标题
                    String itemInfo = this.httpUtils.doGetHtml( item.getUrl() );
                    String title = Jsoup.parse( itemInfo )
                                        .select( "div.sku-name" )
                                        .text();
                    item.setTitle( title );
                    item.setCreated( new Date() );
                    item.setUpdated( item.getCreated() );
                    // 保存商品数据到数据库
                    this.itemService.save( item );
                }
            }
        }
    }
    

    注意事项,一开始我httpclient没有添加header,导致获取到的html都是跳转到登录页面,后面模拟浏览器之后OK了

    展开全文
  • vue 如何给页面添加enter回车事件? 主要代码: @keyup.enter.native=&quot;ajaxLoginApi()&quot; 代码示例: &amp;lt;el-form ref=&quot;form&quot; :model=&quot;...

    vue 如何给页面添加enter回车事件?


    主要代码:

    
     	@keyup.enter.native="ajaxLoginApi()"   
     	
    

    代码示例:

    
    	<el-form ref="form" :model="form" :label-position="labelPosition" label-suffix=":" label-width="100px" status-icon>
         	   <el-form-item label="手机号码">
                    <el-input v-model="form.username" size="mini" @keyup.enter.native="ajaxLoginApi()"></el-input>
               </el-form-item>
               <div class="tips"></div>
               <el-form-item label="密码">
                    <el-input type="password" v-model="form.pwd" size="mini" clearable  @keyup.enter.native="ajaxLoginApi()"></el-input>
               </el-form-item>
               <div class="tips"></div>
               <div class="tips"></div>
               <div style="margin-top: 10px;margin-left:0">
                 <el-button type="primary" @click="ajaxLoginApi" size="medium">确认登录</el-button>
                 <el-button type="" plain size="medium" @click="linkTo('#/register')">立即注册</el-button>
               </div>
         </el-form>
    
    

    效果图截图:

    在这里插入图片描述

    除了按钮提交,还能在表单校验无误之后,键盘enter回车提交!


    以上就是关于 ” vue 给页面添加enter回车事件 - 代码篇 “ 的全部内容。

    展开全文
  • 苹果手机页面不兼容问题——mui

    千次阅读 热门讨论 2018-08-29 21:00:35
      近期,客户打电话来说系统出现了一个问题,就是苹果的手机页面不能往下滑动,导致数据显示只有一页,很多数据都不能显示。情况如下:   但是安卓手机上很正常,经过分析,和js和ajax都没有关系,那么就只...

      前天,客户打电话来说系统出现了一个问题,就是苹果的手机页面不能往下滑动,导致数据显示只有一页,很多数据都不能显示。情况如下:
    这里写图片描述
      但是在安卓手机上很正常,经过分析,和js和ajax都没有关系,那么就只可能是和mui框架或者iframe标签有关系了,找到原因后就可以定位解决了。
      具体的原因是因为mui的框架样式不兼容苹果手机的浏览器,css样式有两个属性可以完美的帮助我们解决这个问题。我们将它修改一下,自己写一个样式添加上去就可以。

    原先的代码:

    <!--主要可变区域-->
    <div id="offCanvasContentScroll" class="mui-content mui-scroll-wrapper">
    	<iframe id="content" frameborder="0"scrolling="auto" 
    		style="width: 100%; height: 100%;" src="/mobile_annonce/Index" >
    	</iframe>
    </div>
    

    做如下修改,来兼容iphone的浏览器。

    1、添加css样式:

    /*********************************************************************/
    /*
        修改人:张连康
        修改内容:兼容iframe框架的苹果手机端的下滑滚动
        修改时间:2018年8月29日17:01:35
    */ 
    .main-iframe-holder {
        margin-top:44px;  /*适应手机端顶部区域*/ 
        position: fixed;
        right: 0;
        bottom: 0;
        left: 0;
        top: 0;
        -webkit-overflow-scrolling: touch;
        overflow-y: scroll;
    }
    
        .main-iframe-holder iframe {
            height: 100%;
            width: 100%;
        }
    /*********************************************************************/
    

    2、将原先的mui的框架div去掉,换成如下div,并应用上面的css样式。

    <!--
    /*********************************************************************/
    /*
        修改人:张连康
        修改内容:兼容iframe框架的苹果手机端的下滑滚动
        修改时间:2018年8月29日17:01:35
    */    
    -->
    <!--主要可变区域-->
    <div class="main-iframe-holder">
        <iframe id="content" frameborder="0" scrolling="auto" 
        style="width: 100%; height: 100%;" src="/mobile_annonce/Index"></iframe>
    </div>
    <!--/*********************************************************************/-->
    

    3、查看效果,经过测试在苹果手机上都已经解决了。
    这里写图片描述

      也是经过查看了好多资料才找到的解决方案,解决ios系统iframe滚动问题这是一个国外的网站,幸好没有被墙掉,不然都不知道要费多少时间才能解决,就这样,也是花费了一天的时间和精力,软考和自考都落下很多了。。。希望系统不要在有bug了,让我安静的学习一段时间。
      解决问题前,一定要分析问题产生的原因,不能上来就干,要不然会浪费很多时间,做一些无用功。才好对症下药,提高效率、节省时间。

    展开全文
  • 很多的企业的营销重心,逐渐从个人微信转向了企业微信,这是一个大趋势,但是转变的过程中,肯定会损失一大半客户,虽舍不得却也无可奈何。 将客户从个人微信导向企业微信,有两种情况:第一,没有拿到客户的手机...
  • 实现手机web功能时候,会出现咨询页面客服的需求,此时客服使用的是QQ方式交流,就...js中添加时间具体实现: function chatQQ(){ /*1234567对应的就是需要聊天的客服*/ window.location.href = "mqqwpa://im/c
  • 解决微信android页面显示的一个异常问题
  • 如果按照传统的方式只能打出一个二维码,让用户去扫码关注、添加之类的,这个场景适合PC端,试想现在用户更多的时间是停留在手机端的,所以没办法拿着自己的手机去扫自己手机屏幕上面的二维码,那么久孵化出一种需求...
  • 通过手机浏览器打开APP或者跳转到下载页面通过手机浏览器打开APP或者跳转到下载页面 添加 schemes 网页设置 参考链接 以下仅展示最简单的例子及关键代码 由于硬件条件有限,仅测试了 Android 下的情况 IOS 的...
  • QMUI Android框架的官方说,QMUIGroupListView一般用于设置页面,如下图所示是官方说的。但是官方给出的样例demo仅仅也就展示了4个样例,显示文本、箭头、开关和加载效果。一个设置中心要放置的表单元素种类太多了,...
  • 如何为手机APP添加智能客服功能?

    千次阅读 2018-09-10 14:43:55
    公司运营了一款APP产品,业务发展...于是老板叫我APP里加一个客服功能,第一版做了类似留言板的反馈功能,老板不满意,要求实现类似微信的即时通讯。自己开发即时通讯谈何容易,Github上也没有合适开源项目。想建...
  • jquery mobile开发手机webapp页面

    千次阅读 2016-06-23 13:40:37
    主要功能是实现手机图片的上传,添加配文和博客排序功能。整个应用分为首页,图片上传页,编辑页,我的页。我的页面里面有草稿箱,我的关注和我的收藏等功能。我要主要介绍的是jquery mobile项目中的应用和上传...
  • Write By Monkeyfly 以下内容均为原创,如需转载请注明出处。 前提 今天下午JS前端群里有人问了一...用本地在手机浏览器中可以,但是微信中不行,ios没问题的,只有安卓有问题。 安卓手机上的浏览器可以...
  • 现在有发现越来越多的...那么如果按照传统的方式,我们只能外部广告页放一个二维码,让用户去扫码关注、添加之类的,这个场景适合PC端,试想现在用户更多的时间是停留在手机端的,所以没办法拿着自己的手机去扫...
  • html5模仿手机音乐播放器(添加音乐进度条和时长)

    千次阅读 多人点赞 2018-01-01 14:39:33
    自己添加的是点击按钮页面滑动,和上一曲下一曲播放,和歌曲列表点击播放,还有进度条的同步,实时音乐时间和音乐总时长。高手勿喷,本人小白。原谅原谅。 以下是部分截图 下面是部分代码   &lt;!...
  • Android内嵌H5页面调用手机图片操作

    万次阅读 热门讨论 2015-09-01 14:50:18
    这段时间一直忙着产品需求迭代更新,有几天没有写博客了。这个迭代中,遇到了一个比较棘手的问题,情况是这样:我们APP中有一个功能是引导商家入驻我们平台,商家入驻就需要填写一些企业信息和上传营业执照或...
  • 继上一篇:一步一步构建手机WebApp开发——环境搭建篇过后,我相信很多朋友都想看看实战案例,这一次的教程是页面布局篇,先上图:    如上图所示,此篇教程便是教初学者如何快速布局这样的页面。废话少说,...
  • 最近通过谷歌广告烧了一段时时间,发现手机端的流量占了所有流量的一半以上,如果一个让人产生烦躁的网站,浏览一圈还找不着北的网站,一个对于新的访客不信任的网站,都会造成访客流失,广告白花。所以,优化手机端...
  • 我们有时进一些网面或专题页面会自动弹出一个加为好友的对话框了,研究了很久之后发现可以直接使用js来实现,下面我们一起来看js实现打开网页自动弹出添加QQ好友邀请窗口的方法。             第一...
  • 手机版制作H5页面免费工具大集合

    千次阅读 2016-08-04 21:38:07
     初页作为手机端制作动态海报的APP,门槛还是比较低的,容易上手,可以直接在手机上编辑,制作极为便利,图文混排的模板也很丰富。可免费下载安卓版和苹果版初页App,或通过电脑在线创建、编辑,轻松创作优雅、炫酷,...
  • 本文涉及性能测试技术,特别是涉及一种基于图像识别的测试手机网页首屏时间的方法,它可以应用在手机浏览器页面加载响应时间的的自动化测试或性能检测中。同时可以应用到其他android的apk的响应时间的测试中去 ...
  • 按键精灵,虽然很早听过,但是一直没有真正使用过,所以最近有点时间也简单试一下,通过脚本自动清理APP缓存,打开百家号并自动进入注册页面输入自己的手机号。 软件清单 1. 雷电手机模拟器:...
  • 终于到了服务器端,第三篇的手机客户端如果已经下载了的话,没有服务器是不能正常运行的。 服务器端要做得事很多,虽然逻辑不是很复杂,但是我们必须要分析清楚我们要做哪些事,请看下图: 通过这张图,我们...
  • 昨天才接触jquery-mobile,想写一个手机适应页面,由于基础不好,各种问题困扰,做到晚上还没有完成,现在把遇到的一些问题记录下来以免后面还会遇到,都是一些基础的问题,  使用jquery 的append 添加元素时所...
  • 登录appleid的时候,首先是需要输入安全问题,如果忘了这个问题,是可以绕过这个的,这个网上已经有很多方法了,这里就不介绍了。接下来是添加手机号,登录成功后,点击账号后面的编辑,点击添加更多信息,可以...
  • 前端的性能对于一个Web应用来说非常重要,如果一个Web应用的页面加载速度非常快、对于用户的操作可以及时响应,那么产品的用户体验将会极大地提升。下图显示了页面加载速度对于用户体验的影响。 你的Web...
  • 一个选择时间的时候遇到了一个问题,电脑模拟器没什么问题,打包放到手机上出现的问题是自带键盘和选择时间显示的同时弹出了, &lt;div class="date-time-input-wrap"&gt; &lt;van-field...
  • 项目中的需求:点击浏览器中的返回按钮,要让页面重新加载资源。因为这部分的资源每次去加载的内容都不一样,如果返回的时候,还是看到原先的内容,那做这个内容块的意义就很...原因:部分浏览器后退时不会触发onl...
  • 用Linux DeployAndroid手机上安装Linux

    万次阅读 多人点赞 2017-01-11 09:24:41
    使用Linux Deploy唯一的好处就是可以充分利用废弃的手机,而且手机具有省电,便捷的特点。安装了Linux之后,完全可以满足基本的学习Linux的需要,而且还不怕把系统搞死,大不了重装咯。ʅ(´◔౪◔)ʃ 准备...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 86,912
精华内容 34,764
关键字:

怎么在手机页面添加时间