jquery完毕动态改变div宽度和惊人,获取网页显示器可知区域中度

By admin in 4858美高梅 on 2019年4月1日

获得浏览器窗口的可视区域中度和幅度,滚动条中度。

jquery完毕动态改变div宽度和惊人,获取网页显示器可知区域中度。完整代码:

Android 截图

上边是测试代码,记得先引用JQuery库

document.body.clientWidth ==> BODY对象宽度
document.body.clientHeight ==> BODY对象高度
document.documentElement.clientWidth ==> 可见区域宽度
document.documentElement.clientHeight ==> 可见区域高度

document.body.clientWidth ==> 网页可见区域宽 
document.body.clientHeight ==> 网页可见区域高
document.body.offsetWidth ==> 网页可见区域宽(包括边线的宽)
document.body.offsetHeight ==> 网页可见区域高(包括边线的高)
document.body.scrollWidth ==> 网页正文全文宽document.body.scrollHeight ==> 网页正文全文高
document.body.scrollTop ==> 网页被卷去的高
document.body.scrollLeft ==> 网页被卷去的左
window.screenTop ==> 网页正文部分上
window.screenLeft ==> 网页正文部分左
window.screen.height ==> 屏幕分辨率的高
window.screen.width ==> 屏幕可用工作区高度
window.screen.availHeight ==> 屏幕可用工作区高度
window.screen.availWidth ==> 屏幕可用工作区宽度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery动态改变div宽度和高度</title>
<script type="text/javascript" src="jquery/jquery-1.11.2.min.js"></script>
</head>
<body>
<div>
<input id="addwidthkeleyi" value="增加宽度" type="button" />
<input id="reducewidthkeleyi" value="减少宽度" type="button" />
<input id="addheightkeleyi" value="增加高度" type="button" />
<input id="reduceheightkeleyi" value="减少高度" type="button" />
 点击按钮,注意下方div宽高的变化</div>
<div style="border:1px solid #999;width:200px;height:200px" id="keleyidiv"></div>
<script type="text/javascript">
$("#addwidthke"+"leyi").on("click", function () {
$("#keleyidiv").width($("#keley" + "idiv").width() + 50);
});
$("#reducewidthk" + "eleyi").on("click", function () {
$("#keleyidiv").width($("#kel"+"eyidiv").width() - 50);
});
$("#addheightkele" + "yi").on("click", function () {
$("#kel" + "eyidiv").height($("#keleyidiv").height() + 50);
});
$("#reduceheightkeley" + "i").on("click", function () {
$("#keleyidiv").height($("#keleyidiv").height() - 50);
});
</script>
</body>
</html>

复制代码 代码如下:

jquery函数获取格局

如上所述就是本文的全体内容了,希望我们能够欣赏。

1. 概述

该措施是透过View的艺术获取当前activity的显示器截图,并不是frameBuffer的不二等秘书诀,所以有自然的局限性。不过那种措施相对简单,不难掌握。

<script type=”text/javascript”>
$(document).ready(
function()
{
var h = $(window).height();
4858美高梅,alert(h);
}
)
</script>

$(window).height()                //浏览器时下窗口可视区域高度   
$(document).height()            //浏览器时下窗口文档的高度   
$(document.body).height()      //浏览器时下窗口文档body的高度   
$(document.body).outerHeight(true) //浏览器时下窗口文档body的总高度 包括border padding margin   
$(window).width()     //浏览器时下窗口可视区域宽度   
$(document).width()   //浏览器时下窗口文档对于象宽度   
$(document.body).width()      //浏览器时下窗口文档body的高度   
$(document.body).outerWidth(true) //浏览器时下窗口文档body的总宽度 包括border padding
alert($(document).scrollTop()); //获取滚动条到顶部的垂直高度
alert($(document).scrollLeft()); //获取滚动条到左边的垂直宽度

HTML精确定位:  scrollLeft,scrollWidth,clientWidth,offsetWidth

scrollHeight: 获取对象的滚动高度。   
scrollLeft: 设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离   
scrollTop:  设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离   
scrollWidth: 获取对象的滚动宽度   
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度   
offsetLeft: 获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置   
offsetTop:  获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置   
event.clientX 相对文档的水平座标   
event.clientY 相对文档的垂直座标   
event.offsetX 相对容器的水平坐标   
event.offsetY 相对容器的垂直坐标   
document.documentElement.scrollTop 垂直方向滚动的值   
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

你恐怕感兴趣的小说:

  • jquery动态改变div宽度和惊人
  • 听他们说jQuery达成左右div自适应中度完全相同的代码
  • js/jquery获取浏览器窗口可视区域高度和宽窄以及滚动条中度实现代码
  • js和jquery咋样获取图片真实的宽窄和可观
  • JQuery获取当前显示屏的惊人小幅度的兑现代码
  • JS和jquery获取各样显示屏的增进率和惊人的代码
  • 运用jquery获取网页中图纸高度的二种办法
  • JQuery获取种种宽度、中度(format函数)实例
  • JQuery获取浏览器窗口内容部分中度的代码
  • jQuery获取页面及个要素高度、宽度的总括——超实用
  • jquery达成在页面加载达成后拿走图片高度或宽度
  • jquery获取文书档案中度和窗口中度集中
  • jQuery达成获取隐藏div中度的秘诀言传身教

2. 应用办法

  1. 对activity进行截图

    /**
         * Activity screenCap
         *
         * @param activity
         * @return
         */
        public static Bitmap activityShot(Activity activity) {
            /*获取windows中最顶层的view*/
            View view = activity.getWindow().getDecorView();
    
            //允许当前窗口保存缓存信息
            view.setDrawingCacheEnabled(true);
            view.buildDrawingCache();
    
            //获取状态栏高度
            Rect rect = new Rect();
            view.getWindowVisibleDisplayFrame(rect);
            int statusBarHeight = rect.top;
    
            WindowManager windowManager = activity.getWindowManager();
    
            //获取屏幕宽和高
            DisplayMetrics outMetrics = new DisplayMetrics();
            windowManager.getDefaultDisplay().getMetrics(outMetrics);
            int width = outMetrics.widthPixels;
            int height = outMetrics.heightPixels;
    
            //去掉状态栏
            Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width,
                    height-statusBarHeight);
    
            //销毁缓存信息
            view.destroyDrawingCache();
            view.setDrawingCacheEnabled(false);
    
            return bitmap;
        }
    
  2. 能够将收获的bitmap格式图片保存到地面,也能够用来此外用途。下边是将bitmap保存到本地的点子。

    private static final String SCREENSHOTS_DIR_NAME = "screenShots";
        private static final String SCREENSHOT_FILE_NAME_TEMPLATE = "Screenshot%s.jpg";
        private static final String SCREENSHOT_FILE_PATH_TEMPLATE = "%s/%s/%s";    
    
    /**
         * 存储到sdcard
         *
         * @param bmp
         * @return
         */
        public static String saveToSD(Bitmap bmp) {
            //判断sd卡是否存在
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                //文件名
                long systemTime = System.currentTimeMillis();
                String imageDate = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date(systemTime));
                String mFileName = String.format(SCREENSHOT_FILE_NAME_TEMPLATE, imageDate);
    
                File dir = new File(SCREENSHOTS_DIR_NAME);
                //判断文件是否存在,不存在则创建
                if (!dir.exists()) {
                    dir.mkdirs();
                }
    
                //文件全名
                String mstrRootPath = Environment.getExternalStorageDirectory().toString();
                String mFilePath = String.format(SCREENSHOT_FILE_PATH_TEMPLATE, mstrRootPath,
                        SCREENSHOTS_DIR_NAME, mFileName);
    
                Log.i(TAG, "file path:" + mFilePath);
                File file = new File(mFilePath);
                if (!file.exists()) {
                    try {
                        file.createNewFile();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                Log.i(TAG, "file path:" + file.getAbsolutePath());
                FileOutputStream fos = null;
                try {
                    fos = new FileOutputStream(file);
                    if (fos != null) {
                        //第一参数是图片格式,第二参数是图片质量,第三参数是输出流
                        bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
                        fos.flush();
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (fos != null) {
                        try {
                            fos.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
    
                return mFilePath;
            }
            return null;
        }
    
  3. 在意在AndroidManifest.xml中注册写入的权力

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  4. 截图时碰着的坑


在先后中应用方面包车型客车办法进行应用内截图,结果出现了上边包车型地铁谬误提醒:

java.lang.IllegalArgumentException: x + width must be <= bitmap.width()
    at android.graphics.Bitmap.createBitmap(Bitmap.java:686)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:654)
    java.lang.IllegalArgumentException: x + width must be <= bitmap.width()
    at android.graphics.Bitmap.createBitmap(Bitmap.java:686)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:654)
    at com.csmijo.practice.utils.ScreenCap.activityShot(ScreenCap.java:85)
    at android.os.Handler.handleCallback(Handler.java:808)
    at android.os.Handler.dispatchMessage(Handler.java:103)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:5532)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
    at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
    at dalvik.system.NativeStart.main(Native Method)

眼看要交给了产出那种坑,内心即刻凌乱了。谷歌(Google)后发觉,那个错误是出于选拔这些主意造成的:

Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width,height-statusBarHeight);

这是Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height)办法的牵线:

Returns an immutable bitmap from the specified **subset of the source
bitmap**. The new bitmap may be the same object as source, or a copy
may have been made. It is initialized with the same density as the original bitmap.

该措施重临的是source的子集,所以就要求:

  • x + width <= source.width
  • y + height <= source.height

鉴于自家的程序中是直接运用的显示屏宽度,所以出现了地方的一无所长。说道显示器宽度,就引出了笔者上边包车型客车素材搜索。

Firefox下:

4858美高梅 1

四. Android 获得获取荧屏中度、标题中度、状态栏中度

4858美高梅 2

气象栏题目栏中度度量

该图片源于Android完美获取状态栏中度、标题栏中度、编辑区域高度的拿走

  • 最大的翠绿色区域是显示器区域
  • 次大的水日光黄区域是采纳界面区域
  • 微小的浅蓝区域是View绘制区域
  • 显示器上方和使用界面上方之间的有些为状态栏
  • 选择界面上方与view绘制区域上方之间的片段为标题栏

4858美高梅 3

 

一. 下边介绍一些拿走显示屏参数的艺术

一.View 获得显示器参数值的方法:

方法 影响区域 说明
onSizeChanged(int w,int h,int oldw,int oldh) view绘制区域 当前view屏幕宽高发生变化时调用,传递view的宽高,其中高度不包括标题高度
getWidth() view绘制区域 返回view的宽度
getHeight() view绘制区域 返回view的高度,不包括标题在内
getWindowVisibleDisplayFrame(Rect outRect) 应用界面区域 返回宽度和View的宽度相等,高度=view的高度 + 标题的高度
getDrawingRect(Rect outRect) view绘制区域 返回绘制区域的区域值,宽度和高度都和view的相等

贰.Canvas对象获得画布宽高,由view的draw函数字传送递canvas对象,也是在view中开创

方法 影响区域 说明
canvas.getWidth() 屏幕区域 返回画布的宽度,即屏幕的宽度
canvas.getHeight() 屏幕区域 返回画布的高度,即屏幕的高度

三.Display对象获得显示器宽高

通过Activity的`getWindowManager.getDefaultDisplay()`方法可以获取到`display`对象
方法 影响区域 说明
display.getWidth() 屏幕区域 返回界面的宽度,即屏幕的宽度
display.getHeight() 屏幕区域 返回界面的高度,即屏幕的高度

IE下:

二. 景况栏中度的测量

一.主意一:通过系统尺寸财富获得

情景栏中度定义在Android系统尺寸财富中status_bar_height,但那并不是公开可径直行使的,例如像平常选择系统能源那样android.R.dimen.status_bar_height。不过系统给我们提供了3个Resource类,通过那几个类能够博得能源文件,借此可以赢获得status_bar_height:

public static int getStatusBarHeight(Context context) {
        int statusBarHeight = -1;
        /* 获取status_bar_height的资源ID*/
        int resourceId = context.getResources().getIdentifier(
                "status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            // 根据资源ID获取响应的尺寸值
            statusBarHeight = context.getResources().getDimensionPixelSize(
                    resourceId);
        }
        return statusBarHeight;
    }

2.措施二:通过奔驰M级类的反射

public static int getStatusBarHeight(Context context) {
        int statusBarHeight = -1;  
        try {  
            Class<?> clazz = Class.forName("com.android.internal.R$dimen");  
            Object object = clazz.newInstance();  
            int height = Integer.parseInt(clazz.getField("status_bar_height")  
                    .get(object).toString());  
            statusBarHeight = getResources().getDimensionPixelSize(height);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return statusBarHeight;
    }

3.方法叁:利用应用区域Top属性

public static int getStatusBarHeight(Context context) {
        /*获取windows中最顶层的view*/
        View view = activity.getWindow().getDecorView();

        //获取状态栏高度
        Rect rect = new Rect();
        view.getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        return statusBarHeight;
    }

注意:

借使只是获取statusBar中度而不到手titleBar高度时,那种办法并不引进大家使用,因为这种方法信赖于WMS(窗口管理服务的回调)。正是因为窗口回调机制,所以在Activity初阶化时实施此办法获得的可观是0。那一个办法推荐在回调方法onWindowFocusChanged()中执行,才能博取预期结果。

4858美高梅 4

三. 标题栏高度的度量

正如上边介绍的,运用界面上边view绘制区域上方之间的一些为标题栏。所以自然会想到三种衡量标题栏中度的格局:一个是行使Top-Top,另2个正是应用高度-高度。先介绍一下取得各区域宽高的代码:

//屏幕区域
DisplayMetrics outMetrics = new DisplayMetrics();
WindowManager windowManager = activity.getWindowManager();
windowManager.getDefaultDisplay().getMetrics(outMetrics);
int width = outMetrics.widthPixels;    //屏幕宽度
int height = outMetrics.heightPixels;    //屏幕高度

//应用界面区域
View view = activity.getWindow().getDecorView();
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect); 
int appTop = rect.top;    //状态栏高度,也是应用界面顶部的高度值
int appHeight = rect.height();    //应用界面高度


//view绘制区域
Rect outRect2 = new Rect();  
activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect2);   
int viewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();  //view绘制区域顶部的高度值
int viewHeight = outRect2.height();   //view绘制界面的高度

1. 方法一:Top-Top

/**
 * 标题栏高度 = view绘制区域顶端高度值 - 应用界面区域顶端高度值 
 */
 int titleHeight = viewTop - appTop;

2. 方法二:高度- 高度

/**
 * 标题栏高度 = 应用界面区域高度 - view绘制区域高度
 */
 int titleHeight =  appHeight - viewHeight;

能够窥见它拿走的却是是窗口的内容部分中度,而不是浏览器窗口的莫斯中国科学技术大学学。Oh
Yeah!

四. 注意事项

  1. 无论是您是不是设置全屏方式,或是不显示标题栏,在采取得到状态栏低度方法1收获状态栏中度方法二都会度量到状态栏的高度,明白原理就简单解释——系统财富属性是一贯的、真实的,不管您是不是隐瞒(隐藏或然呈现),它都在那里;

  2. 是若选用获取状态栏中度方法三,以及得到标题栏中度方法一和收获标题栏中度方法贰都是依靠于WMS,是在界面塑造后基于View获取的,所以显得了就有惊人,不显得自然没中度了


参考文献

  • Android开发
    获取当前activity的显示屏截图
  • Android显示器截图这几个事
  • java.lang.IllegalArgumentException: x 一定要小于
    bitmap.width()
  • Android完美获取状态栏中度、标题栏中度、编辑区域中度的拿走
  • Android
    获取显示器中度、标题中度、状态栏中度详解

您也许感兴趣的稿子:

  • jquery完成动态改变div宽度和高度
  • jquery动态改变div宽度和可观
  • 遵照jQuery完毕左右div自适应中度完全相同的代码
  • js/jquery获取浏览器窗口可视区域中度和宽度以及滚动条中度完成代码
  • js和jquery怎么着获取图片真实的上涨幅度和高度
  • JQuery获取当前显示器的万丈大幅的落到实处代码
  • JS和jquery获取种种显示器的幅度和可观的代码
  • 使用jquery获取网页中图纸中度的三种办法
  • JQuery获取各类宽度、中度(format函数)实例
  • jQuery获取页面及个成分中度、宽度的下结论——超实用
  • jquery达成在页面加载达成后获得图片高度或宽度
  • jquery获取文书档案中度和窗口中度集中
  • jQuery完毕获取隐藏div中度的法子言传身教

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有