回答編集履歴

2

コードを追加

2021/08/29 01:57

投稿

itagagaki
itagagaki

スコア8402

test CHANGED
@@ -15,3 +15,77 @@
15
15
 
16
16
 
17
17
  (追記)このアプローチは画像のオリジナルサイズと`background-size`から表示サイズを自分で計算してみているわけで、必ずしもブラウザ(レンダリングエンジン)の結果とぴったり一致するとは限らない、という問題はありますね。用途によると思いますが。
18
+
19
+
20
+
21
+ ---
22
+
23
+
24
+
25
+ コードの間違いをFixしてみました。
26
+
27
+
28
+
29
+ ```jQuery
30
+
31
+ function getBackgroundSize(selector, callback) {
32
+
33
+ var img = new Image(),
34
+
35
+ // here we will place image's width and height
36
+
37
+ width, height,
38
+
39
+ // here we get the size of the background and split it to array
40
+
41
+ backgroundSize = $(selector).css('background-size').split(' ');
42
+
43
+
44
+
45
+ // checking if width was set to pixel value
46
+
47
+ if (/px/.test(backgroundSize[0])) width = parseInt(backgroundSize[0]);
48
+
49
+ // checking if width was set to percent value
50
+
51
+ if (/%/.test(backgroundSize[0])) width = $(selector).width() * (parseInt(backgroundSize[0]) / 100);
52
+
53
+ // checking if height was set to pixel value
54
+
55
+ if (/px/.test(backgroundSize[1])) height = parseInt(backgroundSize[1]);
56
+
57
+ // checking if height was set to percent value
58
+
59
+ if (/%/.test(backgroundSize[1])) height = $(selector).height() * (parseInt(backgroundSize[1]) / 100);
60
+
61
+
62
+
63
+ img.onload = function () {
64
+
65
+ // check if width was set earlier, if not then set it now
66
+
67
+ if (typeof width == 'undefined') width = this.width;
68
+
69
+ // do the same with height
70
+
71
+ if (typeof height == 'undefined') height = this.height;
72
+
73
+ // call the callback
74
+
75
+ callback({ width: width, height: height });
76
+
77
+ }
78
+
79
+ // extract image source from css using one, simple regex
80
+
81
+ // src should be set AFTER onload handler
82
+
83
+ img.src = $(selector).css('background-image').replace(/url(['"]*(.*?)['"]*)/g, '$1');
84
+
85
+ }
86
+
87
+ ```
88
+
89
+
90
+
91
+ そして `getBackgroundSize("#backg", (size) => alert(size.width + "," + size.height));` を試したら 25,25 と出ました。

1

追記

2021/08/29 01:57

投稿

itagagaki
itagagaki

スコア8402

test CHANGED
@@ -7,3 +7,11 @@
7
7
 
8
8
 
9
9
  ここに書き残されている`getBackgroundSize`をちょっと試してみたところ、まずjQueryが必要なのと、ちょっとバグがあるのか正しい結果が得られなかったんですが、アプローチは良さげですので、このコードをベースに修正してみるのもいいかと思います。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ (追記)このアプローチは画像のオリジナルサイズと`background-size`から表示サイズを自分で計算してみているわけで、必ずしもブラウザ(レンダリングエンジン)の結果とぴったり一致するとは限らない、という問題はありますね。用途によると思いますが。